次の関数を使用して行番号を割り当てる 2 つのリストがあります (UNIX の nl に似ています)。
def nl(inFile):
numberedLines = []
for line in fileinput.input(inFile):
numberedLines.append(str(fileinput.lineno()) + ': ' + line)
numberWidth = int(log10(fileinput.lineno())) + 1
for i, line in enumerate(numberedLines):
num, rest = line.split(':',1)
fnum = str(num).rjust(numberWidth)
numberedLines[i] = ':'.join([fnum, rest])
return ''.join(numberedLines)
これは次のようなリストを返します: 1: 12 14
2: 20 49
3: 21 28
. infile
私が使用している では、行番号が非常に重要です。2 番目のリストも同じように構成されていますが、行番号には何の意味もありません。2 番目のファイルからリストの違いを見つけ、最初のファイルから行番号を返す必要があります。たとえば、2 番目のファイルの場合:最初のリストから欠落している値の行番号5: 12 14
48: 20 49
のみを返します。3
これが私が試したことです:
oldtxt = 'master_list.txt' # Line numbers are significant
newFile = 'list2compare.txt' # Line numbers don't matter
s = set(nl(oldtxt))
diff = [x for x in (newFile) if x not in s]
print diff
戻り値: [12 14\n', '20 49\n', '21 28\n']
-- 明らかに必要なものではありません。何か案は?