我有两个带有列数据的ASCII文本文件。这两个文件的第一列是两个文件一致的“名称”。一个文件有大约6000行,另一个文件只有800行。没有采用for line in file.readlines():
方法 - 例如,
with open('big_file.txt') as catalogue:
with open('small_file.txt') as targets:
for tline in targets.readlines()[2:]:
name = tline.split()[0]
for cline in catalogue.readlines()[8:]:
if name == cline.split()[0]
print cline
catalogue.seek(0)
break
是否有一种有效的方法只返回较小文件中出现的行(或行)(也使用'name'作为检查)?
如果一次只有一行file.write(matching_line)
,可以创建第三个文件,其中包含来自大文件的所有信息,仅用于小文件中的对象,这是没关系的。< / p>
答案 0 :(得分:4)
for line in file.readlines()
本质上并不坏。你遇到的嵌套循环有什么不好。您可以使用set
跟踪并检查较小文件中的所有名称:
s = set()
for line in targets:
s.add(line.split()[0])
然后,只需遍历较大的文件并检查名称是否在s
:
for line in catalogue:
if line.split()[0] in s:
print line