2016-07-19 10 views
0

異なるディレクトリの2つのファイルリストを比較しようとしています。一致するものが見つかった場合は、そのファイルを別のディレクトリに書き込む必要があります。以下は私のコードです。例えばpythonの異なるディレクトリ間の2つのファイルリストを比較します

filelist= ['sample2\\output_1.txt','sample2\\output_2.txt','sample3\\asn_todlx_mf_output_3.txt'] 
filelist2 = ['sample\\output_1.txt','sample\\output_3.txt','sample\\output_7.txt','sample\\output_2.txt','sample1\\output_3.txt'] 
a = 1 
for name in filelist: 
    a = a + 1 
    for x in filelist2 : 
     file1 = open(x, 'r') 
     file2 = open(name,'r') 
     FO = open('right\\right_file'+str(a)+'.txt', 'w') 

     for line1 in file1: 
      for line2 in file2: 
       if line1 == line2: 
        FO.write("%s\n" %(line1)) 

     FO.close() 
     file1.close() 
     file2.close() 

一致がある場合は、「サンプルフォルダ(ファイルリスト)」からOUTPUT1は、「サンプル2(ファイルリスト)」内のすべてのファイルと比較して、それが「正しい」記述する必要がありますされているフォルダright_file1.txt」のような'しかし、スクリプトは' right_file1.txt 'から' right_file15.txt 'まで15ファイルを生成しています。 1つのファイルとファイルのリストを比較しようとするとうまくいく。これを手伝ってください。

答えて

0

それは私がそれを行う方法です。

filelist1 = ['sample2\\output_1.txt','sample2\\output_2.txt','sample3\\asn_todlx_mf_output_3.txt'] 
filelist2 = ['sample\\output_1.txt','sample\\output_3.txt','sample\\output_7.txt','sample\\output_2.txt','sample1\\output_3.txt'] 

dir1 = filelist1[0].split('\\')[:-1] 
filelist1 = [x.split('\\')[-1] for x in filelist1] 

dir2 = filelist2[0].split('\\')[:-1] 
filelist2 = [x.split('\\')[-1] for x in filelist2] 

common = [x for x in filelist1 if x in filelist2] 

print(common) 
# ['output_1.txt', 'output_2.txt'] 

a = 1 
for file in common: 
    a += 1 
    with open(dir1 + '\\' + file) as f_in: 
     contents = f_in.readlines() 
     with open('right\\right_file' + str(a) + '.txt', 'w') as f_out: 
      f_out.write(contents) 

は当初、私は二つのリストの間で共通しているファイルを探して、私はcommonに自分の名前を格納します。 commonリストのすべてのファイルについて、あなたが言及したように、この別のディレクトリにコピーを作成します。ファイルのクローズとフラッシュを処理するwithの使用に注目してください。そうでない理由がない限り、手動でファイルを管理するのではなく、そのファイルを使用してください。

最後に、私はあなたのイテレータの背後にある論理を得ていませんaしかし、私はあなたからそれをコピーしました。それは価値2で始まります!コピーしたファイルから番号を取得したい場合は、別の方法で行う必要があります。あなたの方法は、作成されたファイルの起点をトレース不可能にします。

それがうまくいけば教えてください。

+0

でも、 'output1'は 'output2'または 'output3'と一致することがあります。 – vignesh

+0

@vigneshオハイオ州、私は参照してください。だからあなたは、ファイル名ではなく、コンテンツごとにファイルを比較したいのですか? –

+0

thatsまさに私が探している – vignesh

関連する問題