Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python进行文件比较_Python - Fatal编程技术网

使用python进行文件比较

使用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():

我有两个文本文件

文件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():
  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代码。