2016-12-01 12 views
0

このPythonスクリプトを使って、タブで区切られたファイルを読み込み、行が'\t'で始まる部分をarrayに配置しました。私はこのために使用されるコード:タブ区切りファイルの読み込みと解析PHP

import sys 
from collections import OrderedDict 
import json 
import os 

file = sys.argv[1] 

f = open(file, 'r') 
direc = '/dir/to/JSONs/' 
fileJSON = sys.argv[1]+'.json' 

key1 = OrderedDict() 
summary_data = [] 
full_path = os.path.join(direc,fileJSON) 

Read = True 
for line in f: 
     if line.startswith("#"): 
      Read = True 

     elif line.startswith('\tC'): 
      Read= True 

     elif line.startswith('\t') and Read == True: 
      summary = line.strip().split('\t') 
      key1[summary[1]]=int(summary[0]) 
      Read = True  

summary_data.append(key1) 
data = json.dumps(summary_data) 
with open(full_path, 'w') as datafile: 
    datafile.write(data) 
print(data) 

私が解析していたデータ:

# BUSCO was run in mode: genome 

    C:98.0%[S:97.0%,D:1.0%],F:0.5%,M:1.5%,n:1440 

    1411 Complete BUSCOs (C) 
    1397 Complete and single-copy BUSCOs (S) 
    14 Complete and duplicated BUSCOs (D) 
    7 Fragmented BUSCOs (F) 
    22 Missing BUSCOs (M) 
    1440 Total BUSCO groups searched 

をしかし、私はPHPで、このコードが必要です..私はPHPにしてにファイルを開くために管理していますこれを読む!誰かが私を助けてくれますか?

答えて

1

私が読む変数のポイントを取得していない - それはあなたのコードでは、常に真であります最後の 'elif'文で十分でしょう。以下はあなたのスクリプトのPHP版です

<?php 
    $fileName = $argv[1]; 
    $dir = '/dir/to/JSONs/'; 
    $fullPath = $dir . $fileName . '.json'; 

    $data = []; 
    $output = fopen($fileName, 'r'); 
    while (($line = fgets($output)) !== false) { 
     if ($line[0] == "\t") { 
      $summary = explode("\t", trim($line)); 
      if (count($summary) > 1) { 
       $data[$summary[1]] = (int)$summary[0]; 
      } 
     } 
    } 

    $strData = json_encode([$data]); 
    $input = fopen($fullPath, 'w+'); 
    fwrite($input, $strData); 
    echo $strData; 
+0

ありがとう!これは 'Undefined offset:1'を返しましたか? –

+0

@AnnaJeanine cliコマンドでファイル名を追加しましたか? like 'php script.php fileWithTabs' –

+0

はい! C:98.0%[S:97.0%、D:1.0%]、F:0.5%、F:0.5%という文字列を返す 'var_dump($ summary) M:1.5%、n:1440 "} ..だから、その行をスキップしませんでした..どのように最初のタブで区切られた行をスキップすることができますか? –

0

読む変数はので、私はそれを削除して、コンソールで結果を見ることができる何かを交換し、あなたのコード内で不要だった:

<?php 
$file = $argv[1]; 
$direc = '/dir/to/JSONs/'; 
$key1 = []; 
$summary_data = []; 
$full_path = $direc.$file.'.json'; 
$file_handler = fopen($full_path, 'r'); 
if($file_handler){ 
    while(($line = fgets($file_handler)) !== false){ 
     if($line[0] == "#" || substr($line, 0 , 2) == "\tC" || empty($line) == true){ 
      echo 'line found : '.$line; 
      continue; 
     }else{ 
      $summary = explode("\t", $line); 
      echo 'summary : '.print_r($summary,true); 
      $key1[str_replace(["\r","\n"], '', $summary[2])] = (int) $summary[1]; 
     } 
    } 
}else{ 
    echo 'Couldn\'t open file.'; 
    exit(); 
} 
array_push($summary_data, $key1); 
$data = json_encode($summary_data); 
fclose($file_handler); 
file_put_contents($full_path, $data); 
+0

ありがとうございます! '$ summary [1]'と '$ summary [1]'を '$ summary [0]'に変更しましたが、 'Undefined offset:1'を返す –

+0

私はそれを解決しました私が書いたように未定義のオフセット問題を使ってください。あなたは$ summary [2]と$ summary [1]として使うべきです –

関連する問題