基本上,我想为我的日常任务创建一个Python脚本,其中我想比较任意大小的两个文件&希望从两个文件中生成两个新文件,其中包含匹配的记录和不匹配的记录。你知道吗
我已经在下面编写了python脚本&发现它对于文件大小很少的记录来说工作正常。你知道吗
但当我对包含200000和500000条记录的文件执行相同的脚本时,生成的结果文件并没有给出有效的输出。你知道吗
所以,你能检查下面的脚本,并帮助确定问题,在它导致错误的输出。。。?你知道吗
提前谢谢。你知道吗
from sys import argv
script, filePathName1, filePathName2 = argv
def FileDifference(filePathName1, filePathName2):
fileObject1 = open(filePathName1,'r')
fileObject2 = open(filePathName2,'r')
newFilePathName1 = filePathName1 + ' - NonMatchingRecords.txt'
newFilePathName2 = filePathName1 + ' - MatchingRecords.txt'
newFileObject1 = open(newFilePathName1,'a')
newFileObject2 = open(newFilePathName2,'a')
file1 = fileObject1.readlines()
file2 = fileObject2.readlines()
Differece = [ diff for diff in file1 if diff not in file2 ]
for i in range(0,len(Differece)):
newFileObject1.write(Differece[i])
Matching = [ match for match in file1 if match in file2 ]
for j in range(0,len(Matching)):
newFileObject2.write(Matching[j])
fileObject1.close()
fileObject2.close()
newFileObject1.close()
newFileObject2.close()
FileDifference(filePathName1, filePathName2)
编辑1:请注意以上程序执行时没有任何错误。只是输出不正确,程序需要更长的时间来处理大文件。你知道吗
我将做一个粗略的猜测,并假设“没有有效的输出”意味着:“永远运行,没有做任何有用的”。你知道吗
这是合乎逻辑的,因为你的理解是:
它们执行
O(n)
查找,这在少量行上是可以的,但是如果len(file1) == 100000
和file2
这样的话,就永远不会结束。然后执行100000*100000次迭代=>;10**10=>;直到永远。你知道吗修复很简单:创建
sets
并使用intersection
&;difference
,速度更快。你知道吗相关问题 更多 >
编程相关推荐