使用python进行文件比较
我有两个文本文件 文件1:使用python进行文件比较,python,Python,我有两个文本文件 文件1: 1234 13454 93837 82739 文件2: comp i 93837 -4.52 82739 -2.2 1234 -2.36 13454 -2.25 我尝试了一个python脚本来比较文件,理想情况下它应该执行以下搜索任务 从文件2中的文件1开始,并将i值附加到文件1。但不幸的是,它不起作用 file1=open("f1.txt","r") file2=open("f2.txt","r") for line1 in file1.readlines():
1234
13454
93837
82739
文件2:
comp i
93837 -4.52
82739 -2.2
1234 -2.36
13454 -2.25
我尝试了一个python脚本来比较文件,理想情况下它应该执行以下搜索任务
从文件2中的文件1开始,并将i值附加到文件1。但不幸的是,它不起作用
file1=open("f1.txt","r")
file2=open("f2.txt","r")
for line1 in file1.readlines():
for line2 in file2.readlines():
if line1 in line2:
print line2
无需使用
读取行
,您只需在文件上迭代即可:
with open('f1.txt') as f1:
ids = set(line.1strip() for line1 in f1)
with open('f2.txt') as f2:
for line2 in f2:
comp,i = line2.strip().split(' ')
if comp in ids:
print(line2)
无需使用
读取行
,您只需在文件上迭代即可:
with open('f1.txt') as f1:
ids = set(line.1strip() for line1 in f1)
with open('f2.txt') as f2:
for line2 in f2:
comp,i = line2.strip().split(' ')
if comp in ids:
print(line2)
你有两个问题
第一个是file1.readlines()
返回每一行,包括回车符。这在file2.readlines()
的结果中永远找不到,因为您的标记出现在行首
第二个问题是,您正在为file1
的每一行迭代file2
。不用说,这不是最有效的方法,但即使您希望保持这种方式,也需要在迭代它之前执行file2.seek(0)
,否则如果文件顺序不正确,您将无法匹配,因为它只会真正迭代file2
一次
总而言之,这是与您发布的内容的最小偏差,它将完成您想要的工作(不过,我要提醒您,肯定有更好的方法实现您的目标,在使用此方法之前,可能需要考虑几分钟):
你有两个问题
第一个是file1.readlines()
返回每一行,包括回车符。这在file2.readlines()
的结果中永远找不到,因为您的标记出现在行首
第二个问题是,您正在为file1
的每一行迭代file2
。不用说,这不是最有效的方法,但即使您希望保持这种方式,也需要在迭代它之前执行file2.seek(0)
,否则如果文件顺序不正确,您将无法匹配,因为它只会真正迭代file2
一次
总而言之,这是与您发布的内容的最小偏差,它将完成您想要的工作(不过,我要提醒您,肯定有更好的方法实现您的目标,在使用此方法之前,可能需要考虑几分钟):
使用一些额外的魔法,您不必读取整个文件,从而提高效率。您还可以使用enumerate获取行号,甚至可以使zip的行为类似于iterable,这样,当您只迭代每一组行和行号时,就不会在内存中生成整个列表
对于文档
使用一些额外的魔法,您不必读取整个文件,从而提高效率。您还可以使用enumerate获取行号,甚至可以使zip的行为类似于iterable,这样,当您只迭代每一组行和行号时,就不会在内存中生成整个列表
DoS.
其他的海报已经解决了为什么你的代码不起作用的问题,但是对于一个更健壮的文件比较解决方案,你可能会考虑Python。
其他的海报已经解决了为什么你的代码不起作用的问题,但是对于一个更健壮的文件比较解决方案,您可能会考虑Python的.
< P>这是一个工作解决方案,尽可能少地修改您的原件:file1=open("f1.txt","r")
file2=open("f2.txt","r")
list1 = file1.readlines()
list2 = file2.readlines()
for line1 in list1:
for line2 in list2:
if line1.strip() in line2.strip().split(' '):
print line2
这里有一个可行的解决方案,它尽可能少地修改您的原始版本:
file1=open("f1.txt","r")
file2=open("f2.txt","r")
list1 = file1.readlines()
list2 = file2.readlines()
for line1 in list1:
for line2 in list2:
if line1.strip() in line2.strip().split(' '):
print line2
当你说“它不起作用”时,你能更具体一点吗?你有错误吗?如果是,错误是什么?你是否得到了意想不到的产出?如果是的话,你期望什么样的产出,你得到了什么产出?当你说“它不工作”时,你能更具体一点吗?你有错误吗?如果是,错误是什么?你是否得到了意想不到的产出?如果是这样的话,您希望得到什么样的输出?您得到了什么样的输出?一个有价值的库,但我不确定我是否能立即在这里看到应用程序。如果你能提出一个使用该模块的可靠方法,我认为这将是一个有价值的贡献。一个有价值的库,但我不确定我是否能立即看到这里的应用程序。如果你能想出一个使用该模块的可靠方法,我认为这将是一个有价值的贡献。事实上,如果file2没有改变,那么再次阅读它实际上是毫无意义的。应使用并接受该答案;)我注意到这段代码并没有实现OP想要的所有功能,因为最终没有更改任何文件。事实上,如果只需要打印这9行Python代码,就可以用
$grep-f f1.txt f2.txt
替换这9行Python代码。事实上,如果file2没有更改,那么再次阅读它实际上是毫无意义的。应使用并接受该答案;)我注意到这段代码并没有实现OP想要的所有功能,因为最终没有更改任何文件。事实上,如果只需要打印这9行Python代码,就可以用$grep-f f1.txt f2.txt
替换这9行Python代码。