2016-05-18 11 views
1

このタイプの質問は数回尋ねられましたが、まったく同じシナリオを見つけて、Python 3を使用しているようです私の場合)pythonを使用して新しい行の各行の差分を新しい行に出力する行を2つ比較する012

私は2つのファイルtxtまたはcsvを持っています。私は各行を比較し、その差異を新しいファイルの新しい行に出力する必要があります。

これまで私が試したことは、これは近づいていますが、それぞれの行の違いを新しい行にする方法を理解できません。新しい行や新しい行をすべて1行にすることしかできないようです。

a = open('test1.txt').read().split() 
b = open('test2.txt').read().split() 
c = [x for x in b if x not in a] 
open('test3.txt', 'wt').write('\n'.join(c)+'\n') 

\ nは.joinはすべての単語新しい行を作成する前に、私は同じ行に1行からのすべての違いをしたい、それぞれの違いに新しい行を望んでいません。 私はそれが理にかなっていることを願っています。

例: test1.txtという:

how are you 
I am well 
all is good 

test2.txtという名前:

how are you 
I like toys 
all is not well 

出力: test3.txt

am well 
good 

私はCSVのためにこのコードをも試みました私は間違いがない。

import csv 

f1 = open ("test1.csv") 
oldFile1 = csv.reader(f1) 
oldList1 = [] 
for row in oldFile1: 
    oldList1.append(row) 

f2 = open ("test2.csv") 
oldFile2 = csv.reader(f2) 
oldList2 = [] 
for row in oldFile2: 
    oldList2.append(row) 

f1.close() 
f2.close() 

print [row for row in oldList1 if row not in oldList2] 

私はこのエラーを取得する:私は、私にはその関連はバージョン3.5であることと、このコードは2.7用に書かれたと思いますか?

File "test3.py", line 18 
    print [row for row in oldList1 if row not in oldList2] 
       ^
SyntaxError: Missing parentheses in call to 'print' 

あなたの最初のコードの問題は、あなたが空白(改行だけではなく)して、ファイルを分割しますあなたのファイルの分割全体であるということです、あなたの助けを

答えて

1

、ありがとうございました。

あなたは、単にあなたの分割さラインを圧縮し、一緒に言葉を比較することができます:

with open('test1.txt') as f1, open('test2.txt') as f2, open('result.txt', 'w') as f3: 
    for line1, line2 in zip(f1, f2): 
     sp1 = line1.split() 
     sp2 = line2.split() 
     f3.write(' '.join([i for i in sp1 if i not in sp2]) + '\n') 
+0

その同じ行にすべてを置く。行の差分出力で正しい行を出力していない '/'を '/'と置き換えた場合 – moore1emu

+0

@ moore1emu固定;-)、解決すると答えが受け入れられます。 – Kasramvd

+0

すごく、最後に+ \ nする必要があるのか​​しらと思っていました。あなたは素晴らしいです、迅速な対応に感謝します。ファイルがcsvの場合も同様ですか? – moore1emu

0

を使用すると、たとえば、手の込んだ出力を、必要な場合はさらに、あなたがdifflibを使っへ顔をしている可能性があります。ここでは第二のコードに問題があなたはこのように、それが動作するはず括弧を追加する場合は「印刷」はPythonの2と3で異なる動作をすることを単にnice tutorialfitting question

0

です:

print([row for row in oldList1 if row not in oldList2]) 
関連する問題