我想使用queryfile.txt作为源文件,它将用于搜索每行并将其与datafile.txt进行匹配。但datafile.txt具有不同的结构。使用来自另一个带扭曲文件的输入来搜索文件的文本[Python]
queryfile.txt应该是这样的:
Gina Cooper
Asthon Smith
Kim Lee
而datafile.txt看起来是这样的:
Gina Cooper
112 Blahblah St., NY
Leigh Walsh
09D blablah, Blah
Asthon Smith
another address here
Kim Lee
another address here
我需要后,得到的名称和行。下面的代码得到两个文件中匹配的名字,这是从dstromberg(https://stackoverflow.com/a/19934477)修改代码:
with open('querfile.txt', 'r') as input_file:
input_addresses = set(names.rstrip() for names in input_file)
with open('datafile.txt', 'r') as data_file:
data_addresses = set(names.rstrip() for names in data_file)
with open('names_address.txt', 'w') as output:
names_address=("\n".join(input_addresses.intersection(data_addresses)))
output.write(names_address)
综上所述,我想在我的OUTFILE(names_address.txt)看到的名字加地址对应于他们的名字,这基本上是下一行。我刚刚在一个月前开始使用python进行游戏,并且我相信我会卡住。感谢您的帮助。通过选项
with open('datafile.txt', 'r') as data_file:
data = data_file.readlines()
data_addresses = list(filter(None, [line for line in data if not line[0].isdigit()]))
Hi @AlbertRothman, 感谢您的建议。 '开放(input_filename, 'R')作为INPUT_FILE: input_addresses = input_file.readlines() 开放(data_filename, 'R')作为DATA_FILE我已经使用这个代码这样的尝试: data_addresses = data_file.readlines() 张开( “emails.txt”, “W”)作为输出: \t为i的范围(LEN(data_addresses)): \t \t用于input_addresses条目: \t \t \t如果进入== data_addresses [我]: \t \t \t \t output.write(data_addresses [I] + data_addresses [I + 1])' ,但我不知道它为什么不能迭代input_addresses的最后一行。有任何想法吗? – jfo
嗯,这取决于错误是什么。它看起来应该工作,输出是意想不到的,你是否得到一个错误?你确定它不会到文件末尾吗?在你的评论中,你已经将呼叫移除了,所以可能只有一些额外的空白。 –
我之前的评论中没有出现任何错误。 如果我使用'data_addresses = [names.rstrip()作为data_file中的名称]',它会给我所需的输出,但不是所需的格式,这是一行不带空格的值。所以我只是用'output.write(data_addresses [i] +“\ n”+ data_addresses [i + 1] +“\ n”)来改变格式。它看起来不漂亮,但它的工作原理。 对于大型数据集(即十万行),应该如何使这些代码更高效? – jfo