Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Search_For Loop - Fatal编程技术网

在另一个文件中搜索一个文件的内容:python

在另一个文件中搜索一个文件的内容:python,python,search,for-loop,Python,Search,For Loop,我试图从文件2中的文件1中搜索名称,并在匹配行上合并一些数据 文件1: A 28 sep 1980 B 28 jan 1985 C 25 feb 1990 D 27 march 1995 和文件2 A hyd B alig C slg D raj 使用此选项: import sys data1 = open(sys.argv[1]).read().rstrip('\n') data2 = open(sys.argv[2]).read().

我试图从文件2中的文件1中搜索名称,并在匹配行上合并一些数据

文件1:

A   28  sep 1980
B   28  jan 1985
C   25  feb 1990    
D   27  march   1995
和文件2

A   hyd
B   alig
C   slg 
D   raj
使用此选项:

import sys
data1 = open(sys.argv[1]).read().rstrip('\n')
data2 = open(sys.argv[2]).read().rstrip('\n')
list1 = data1.split('\n')
list2 = data2.split('\n')

for line in list1:
  for item in list2:
    if line.split('\t')[0] in item.split('\t')[0]:
        print(item,'\t',line.split('\t')[3])
结果:

A   hyd      1980
B   alig     1985
C   slg  1990
D   raj      1995
两个问题(用于澄清概念):

1-我希望如果我改变文件2中行的顺序,我应该得到更少的匹配项,但我仍然得到所有匹配项。为什么?

2-尽管此程序可达到此目的,但预期的内存效率如何?请建议

谢谢

1-我希望如果我改变文件2中行的顺序,我应该得到更少的匹配项,但我仍然得到所有匹配项。为什么?

您的程序执行全部行,因此您将始终获得完整的结果

2-尽管此程序可达到此目的,但预期的内存效率如何?请建议

糟透了。只将最短的文件读入内存,并在较长文件的行上迭代一次

with open('bigfile.txt', 'r') as bigfile:
  for bigline in bigfile:
    for littleline in littlefiledata:
       ...

谢谢你的建议。对于文件大小,文件1和文件2的差别不大(可能是10-20%),但它们的大小相当于4-10GB。因此,我的问题是“可以做些什么来提高性能?”将较小的文件转换为字典而不是反复迭代是否更有意义?