0

2つのテキストファイルを読み取り、それらのテキストの違いを出力するプログラムをPythonで記述しようとしています.2つのファイルは、挿入されたいくつかのコメントのために異なる行番号を除いて類似しています.difflibを使用してみました.モジュールですが、エラーが発生しています。

import difflib
from difflib import *

temp3=[]
temp4=[]
with open ("seqdetect",'r') as f:
    with open ("seqdetect_2",'r') as g:
        for item in f:
            temp1 =item.split()
            temp3.append(temp1)

        for items in g:
            temp2 =items.split()
            temp4.append(temp2)
        d = difflib.Differ()
        diff = d.compare(temp3, temp4)
        print ('\n'.join(diff))

代替案を教えてください。よろしく、 マヤンク

4

1 に答える 1

5

OK、あなたのコードを試してみたところ、問題が見つかりました。

このDiffer.compare()メソッドは、2 つのテキストの行を表す文字列の 2 つのリストを受け取ることを想定しています。ただし、あなたのitem.split()呼び出しのために、リストtemp3temp4は (1 文字の長さの) 文字列のリストのリストです。

その分割であなたが何をしたかったのか正確にはわからないので、何が最善の修正かわかりません. 追加または削除された個々の文字を本当に伝えたい場合は、2 つの for ループで呼び出しをappend()に置き換えることができます。extend()しかし、率直に言って、それはあまり役に立たないようです。

分割が間違いである可能性が高いです。ファイル内の行をループするのではなく、 を使用してすべての行をリストに読み込みreadlines()、Differ にそれらの作業を行わせます。

with open("seqdetect") as f, open("seqdetect_2") as g:
    flines = f.readlines()
    glines = g.readlines()

    d = difflib.Differ()
    diff = d.compare(flines, glines)
    print("\n".join(diff))

違いとしてカウントされるもの (空白の違いなどを無視して) をフィルタリングしたい場合は、difflib のドキュメントを調べて、Differ のコンストラクターのlinejunkまたはパラメーターとして適切な関数を渡す必要があります。charjunk

于 2012-06-13T07:10:13.527 に答える