2016-05-10 13 views
2

私はのPython-比較異なるフォルダからmutlipleファイルを生成し、差分ファイルが

Actual-

  • cc0023-base.txt

  • cc9038.final pythonでシナリオの下に自動化したいです。 txt

予想:

  • base.txt
  • final.txt

1「期待」「実」と同じdirectory.i下に2つの異なるフォルダは、「ベース」との両方の「最終」のファイルを比較したいです他のフォルダにあるdiffファイルを生成します。 差分: base-diff.txt final-diff.txt どのように私はそれをPythonで行うのですか?以下は、私が書いたサンプルコードですが、すべての可能な組み合わせのdiffファイルを生成しています。私はそのベースとベースとの比較のみを行い、両方のフォルダのファイナルとファイナルを比較する必要があります。私はあなたのコードで

+0

必ずしもあなたの問題ではありませんが、 'fromfile'と' tofile'は文字列で、ファイルオブジェクトを送信するように見えます。 (difflib.unifiedlib) 'unified_diff(a、b、fromfile = ''、tofile = ''、fromfiledate = ''、tofiledate = ''、n = 3、lineterm = '\ n') ' –

答えて

0

問題をPYTHONに新しいですと

expected_files=os.listdir('expected/path') 
    actual_files = os.listdir('actual/path') 
    diff_files=os.listdir('diff/path') 
    cr=['base.txt','final.txt'] 
    i=0 

    for files in expected_files: 
     tst=os.path.join('expected/path',files) 
     with open(tst,'r')as Expected: 

      for actualfile in actual_files: 

       actualpath=os.path.join('actual/path',actualfile) 
       with open(actualpath,'r') as actual: 
        diff=difflib.unified_diff(Expected.readlines(), 
               actual.readlines(), 
               fromfile=Expected, 
               tofile=actual,) 

        diffpath=os.path.join('diff/path',cr[i]) 
        diff_file = open(diffpath, 'w') 
        for line in diff: 
         diff_file.write(line) 
        diff_file.close() 
        i=i+1 

このセクションにあり、助けてください:

i=0 
diffpath=os.path.join('diff/path',cr[i]) 
diff_file = open(diffpath, 'w') 
for line in diff: 
    diff_file.write(line) 
diff_file.close() 
i=i+1 

あなたはいつもそれが意志cr[i]にアクセスする前に0iを設定しているので、常にcr[0]

ループを開始する前に、i=0を移動します。あなたは値を0に初期化したいと思います。

私はあなたがこのような何かしたいと思う:

expected_files=os.listdir('expected/path') 
actual_files = os.listdir('actual/path') 
diff_files=os.listdir('diff/path') 
cr=['base.txt','final.txt'] 
j=1 

for files in expected_files: 
    tst=os.path.join('expected/path',files) 
    with open(tst,'r')as Expected: 
     #i=0 
     for i, actualfile in enumerate(actual_files): 

      actualpath=os.path.join('actual/path',actualfile) 
      with open(actualpath,'r') as actual: 
       diff=difflib.unified_diff(Expected.readlines(), 
              actual.readlines(), 
              fromfile=Expected, 
              tofile=actual,) 

       diffpath=os.path.join('diff/path',cr[i]) 
       with open(diffpath, 'w') as diff_file: 
        for line in diff: 
         diff_file.write(line) 
       #diff_file.close() 
       #i=i+1 

いくつかの説明を、そうenumerate(actual_files)はあなたがインクリメントを自分で行う必要はありません。このように、インデックスi、リストactualfileからのデータを提供します。 (がディレクトリ内の2つ以上のファイルでブレークすることにも注意してください!)また、図のように書き込みにはwith open() as foo:構文を使用できます。

+1

問題解決しました:) – Jaya

関連する問題