首先,我使用python 2.7.9 ..... 现在,我试图找到一种最有效的方法来比较一个文本文件(文件A)的行与另一个文本文件(文件B)的行,并将文件A独有的所有行写入一个新的文件(文件A \ B)。
实际上,我已经编写了一个简短的脚本来实现这一点,但它已经超出了...... 我需要脚本能够处理高达70mb(每个,A& B)的文件, 这是不可能的,这是不好的'男孩:
import string
naked = string.strip
kiss = ''.join
def main():
list1 = raw_input("Enter name of .txt-file to clean!\n")
list2 = raw_input("Enter name of .txt-file to exclude!\n")
action(list1, list2)
raw_input("Done!\nPress [ENTER] to exit!")
def action(list1, list2):
f = open(kiss([list1, '.txt']), "r")
g = open(kiss([list2, '.txt']), "r")
h = open(kiss([list1, '_without_', list2, '.txt']), "w")
h_w = h.write
reset = g.seek
found = False
for i in f:
found = [True for j in g if naked(i) == naked(j)]
if not found:
h_w(kiss([naked(i), '\n']))
else:
found = False
reset(0)
f.close()
g.close()
h.close()
main()
是的...有没有人知道如何更有效地做到这一点?! 提前谢谢!
答案 0 :(得分:0)
def read_file(filename):
with open(filename) as src:
return [line.strip() for line in src.readlines()]
def main():
list1 = raw_input("Enter name of .txt-file to clean!\n")
list2 = raw_input("Enter name of .txt-file to exclude!\n")
file1 = read_file(list1)
file2 = read_file(list2)
file3 = open('new_file.txt', 'w')
for line in file1:
if line not in file2:
file3.write(str(line) + '\n') # writes to a new file
file3.close()
print 'Completed'
main()
我不确定这是最快的方法,但它可以解决问题。你可以使用“diff”或“comm”linux命令来获得所需的输出。