2016-09-13 13 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 

私はそれの後に名前と行を取得する必要があります。要約すると

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)で見たいものの名前PLUSされています。ここではdstrombergから変更されたコード(https://stackoverflow.com/a/19934477)がある両方のファイルに名前を一致取得するコードは、です基本的に次の行である名前に対応するアドレス。私はちょうど1ヶ月前にPythonを使い始めました。そして、私は立ち往生していると信じています。助けてくれてありがとう。

答えて

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]) 

を素晴らしい時間の複雑さですが、データセットが表示されます

+0

こんにちは@AlbertRothman、 提案ありがとうございます。私はこのコードを使用してこの方法を試した: 'オープン(input_filename、 'R')とINPUT_FILEとおり input_addressesの=のinput_file.readlines() オープン(data_filename、 'R')とDATA_FILEとおり \t iについての範囲(LEN(data_addresses))において:出力としてオープン( "emails.txt"、 "W")を有する data_addresses =のdata_file.readlinesを() \t \tエントリのinput_addressesで: \t \t \tエントリ場合== data_addresses [I]: \t \t \t \t output.write(data_addresses [i]が+ data_addresses [I + 1]) ' が、私はそれを繰り返すことができなかった理由はさっぱりだがinput_addressの最後の行何か案は? – jfo

+0

Hmmm、それはエラーの内容によって異なります。それはうまくいくかのように見えますが、予期せぬ出力はエラーですか?ファイルの最後には行かないと確信していますか?あなたのコメントでは、余分な空白があるかもしれないので、ストリップへの呼び出しを削除しました。 –

+0

私の前のコメントのコードには何のエラーもありませんでした。 data_addresses = [data_fileの名前に[names.rstrip()を使用すると、希望の出力が得られますが、空白のない単一の値の行です。ですから、私は 'output.write(data_addresses [i] +" \ n "+ data_addresses [i + 1] +" \ n ")'で書式を変更しました。それはかなり見えませんが、それは動作します。 大規模なデータセット(つまり、10万行)でこのコードを効率的にするにはどうすればよいですか? – jfo

0
この書き換え

:代わりにオプションを

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()])) 
関連する問題