2012-04-21 5 views
0

リストの2つのセットから重複リストを見つけようとしました。 私が最初にこのPythonスクリプトをより速くするには?

while True: 
    line=f.readline() 
    if not line: 
     break 
    list_1.append(line) 

で最初のリストを生成し、第二のファイルを通じてスキャンにこのリストを使用します。

while True: 
    line1=f1.readline() 
    if not line1: 
     break 
    for i in list_1: 
     if i==line1[:17]: 
      list_2.append(line1) 
+2

あなたにとって重要な行順はありますか? – San4ez

+0

ファイルの途中で空行が発生するとどうなりますか?ファイルの半分は無視されますか? – San4ez

+2

"空行"はありません。ファイルの中央に "行でない場合"と一致します。readlineは "\ n"文字列を文字列に残します。これは と評価されます。 – jsbueno

答えて

3

限り、ファイルのどれもが過度に大きなされていないとして、その後、setsと内のすべての行を保存しますそれらのセットを比較してください:

lines_1 = set(f) 
lines_2 = set(f1) 
lines_in_both = lines_1 & lines_2 
4

ThiefMastersアンサーは、共通線を任意の順序で出力します。彼らは、ファイルの1に表示されるあなたが同じ順序で項目の出力をしたい場合は、最初のセットにファイル読み込み:

with open("file1.txt") as f: 
    file1_set = set(f) 

を次に順序を制御するファイルを検索

with open("file2.txt") as f: 
    list2 = [line for line in f if line in file1_set] 

生成list2は、我々はまだそれが継続的に戻って、出力ファイルに結果を書き込むことによって動作させることができます(私はこれはかなり遠くにフェッチされると思います)、メモリに収まらない場合は、次の

with open("file2.txt") as f: 
    with open("out.txt", "w") as out: 
     for line in f: 
      if line in file1_set: 
       out.write(line) 
2

2つのファイルの違いを探す場合は、python標準ライブラリに含まれているdifflibモジュールを使用することもできます。モジュールは、シーケンスを比較するためのクラスと関数を提供します。これは、例えばファイルを比較するために使用することができ、HTMLや文脈、統一差分などのさまざまな形式の差分情報を生成することができます。便利な比較方法はdifflib documentationで見つけることができます。

difflib.SequenceMatcher(None, file1.read(), file2.read()) 
関連する問題