2017-09-20 11 views
0

私は、2つのファイルの間の連鎖比較を行い、指定された間隔であれば結果を出力します。Pythonのチェインの間隔の比較

これはこれまで私が行ってきたことです。

test1のファイル:

A0AUZ9,7,17 #just this one line 

テスト2ファイル:

A0AUZ8, DOC_PP1_RVXF_1, 8, 16, PF00149, O24930 
A0AUZ9, LIG_BRCT_BRCA1_2, 127, 134, PF00533, O25336 
A0AUZ9, LIG_BRCT_BRCA1_1, 127, 132, PF00533, O25336 
A0AUZ9, DOC_PP1_RVXF_1, 8, 16, PF00149, O25685 
A0AUZ9, DOC_PP1_RVXF_1, 8, 16, PF00149, O25155 

そして、スクリプト自体:

results = [] 

with open('test1', 'r') as disorder: 
    for lines in disorder: 
     cells = lines.strip().split(',') 
     with open('test2', 'r') as helpy: 
      for lines in helpy: 
       blocks = lines.strip().split(',') 
       if blocks[0] != cells[0]: 
        continue 
       elif cells[1] <= blocks[2] and blocks[3] <= cells[2]: 
        results.append(blocks)      

with open('test3','wt') as outfile: 
    for i in results: 
     outfile.write("%s\n" % i) 

私の優先出力のみTEST3の行を持っているだろう、その:

は、列3と4で2つの数値が、私は何も出力を取得していないtest1のファイルに

を与えられた値の間にある、と私はそれが間違ってどこに行くかわからないんだけど、最初の列に

をIDが一致しています。

+0

ファイルはソートされていますか? –

+0

はい、最初の列のIDの名前(アルファベット順) –

+0

ここにはスペースの問題があります。 strip()は、文字列内のスペースではなく、先頭と末尾のスペースのみを削除します。スペースを完全に無視できる限り、replace( ""、 "")はその点で役立ちます。 – Deneb

答えて

1

文字列と数字を比較していることが予想外の理由の1つです。

しかし、あなたがやろうとしていることを行う良い方法があるかもしれません。最初のファイルがメモリに収まるのに十分小さいと仮定すると:

import csv 
from collections import defaultdict 

lookup_table = defaultdict(list) 

with open('test1.txt') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     lookup_table[row[0]].append((int(row[1]),int(row[2]))) 

with open('test2.txt') as a, open('results.txt', 'w') as b: 
    reader = csv.reader(a) 
    writer = csv.writer(b) 

    for row in reader: 
     record = lookup_table.get(row[0]) 
     if record: 
     if record[0] <= int(row[2]) and record[1] <= int(row[3]): 
      writer.writerow(row) 
+0

ありがとう!上記の提案に基づいてスペースを削除した後、私は_some_結果を得ていましたが、もっと深く調べてみると、それらのいくつかは間違っていました。それらを整数として指定することはやりました。再度、感謝します! –