2016-09-13 34 views
0

我想使用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()])) 

回答

0

环代替,然后你可以只抓下一个索引:

+0

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

+0

嗯,这取决于错误是什么。它看起来应该工作,输出是意想不到的,你是否得到一个错误?你确定它不会到文件末尾吗?在你的评论中,你已经将呼叫移除了,所以可能只有一些额外的空白。 –

+0

我之前的评论中没有出现任何错误。 如果我使用'data_addresses = [names.rstrip()作为data_file中的名称]',它会给我所需的输出,但不是所需的格式,这是一行不带空格的值。所以我只是用'output.write(data_addresses [i] +“\ n”+ data_addresses [i + 1] +“\ n”)来改变格式。它看起来不漂亮,但它的工作原理。 对于大型数据集(即十万行),应该如何使这些代码更高效? – jfo

0

改写这个:

with open('datafile.txt', 'r') as data_file: 
    data_addresses = set(names.rstrip() for names in data_file) 

对此

for i in range(len(data_addresses): 
    for entry in input_addresses: 
    if entry==data_addresses[i]: 
     output.write(data_address[i] + data_address[i+1]) 

这可能没有时间复杂度很高,但您的数据集出现

相关问题