2017-02-09 3 views
0

これを行う方法を調べるためにオンライン検索を使い果たしました。テキストファイルからすべての行を抽出し、別のファイルにリストされた部分一致キーワードを抽出します。

私はタブ区切りファイルsearchfile.txtに2列と> 200行あります。ここでのサンプル:

A(H1N1)/SWINE/COTES-DARMOR/388/2009 X? 4.28144245 
A(H1N2)/SWINE/SCOTLAND/410440/1994 X? 7.25878836 
A(H1)/SWINE/ENGLAND/117316/1986 X? 3.305392038 
A(H1)/SWINE/ENGLAND/438207/1994 X? 7.66078717 

私は部分的にsearchfile.txtでIDと一致いくつかのキーワードを持つ別のファイルkeywords.txt持っている:私はkeywords.txt

のキーワードのいずれかを含む searchfile.txtからすべての行を抽出したい

ENGLAND/117316  
DARMOR/388 
438207 

他の同様の質問からの解決策を使用しました:

grep -F -f keywords.txt searchfile.txt > selected.txt 

grep -f keywords.txt searchfile.txt 

awk 'FNR==NR {a[$0];next} ($NF in a)' keywords.txt searchfile.txt > result.txt 

は、私はまた、このpythonスクリプトとそこに道の一部を得た:

infile = r"/path/to/searchfile.txt" 

results = [] 
to_keep = ["ENGLAND/117316", 
      "DARMOR/388", 
      "438207"] 

with open(infile) as f: 
    f = f.readlines() 

for line in f: 
    for phrase in to_keep: 
     if phrase in line: 
      results.append(line) 
      break 

print(results) 

そしてそれは、ターミナルウィンドウでこれを出力します

[ 
    'A(H1N1)/SWINE/COTES-DARMOR/388/2009 X?\t4.28144245\n', 
    'A(H1)/SWINE/ENGLAND/117316/1986 X?\t3.305392038\n', 
    'A(H1)/SWINE/ENGLAND/438207/1994 X?\t7.66078717\n' 
] 

への道があります)このスクリプトを変更してkeywords.txtのようなファイルから読み込み、行を別のファイルに出力しますか? (私のpythonのスキルがそれまでではありません)

OR

b)はこれを行うには

... grepawksedを使用し、私は問題が私のキーワードが全体の別々の言葉ではないということだと思いますsearchfile.txtにあるものと部分一致する必要があります。

助けてくれてありがとうございます!ありがとう。

+1

'keywords.txt'最初の2行の末尾に空白文字があります。そのため、' grep'は動作しません。 –

+0

'grep -F -f ...' shouild work 。 'sed -i 's/* $ //' file'を使って、keywords.txtからスペースを削除してください。がんばろう。 – shellter

+0

ありがとうございます - sedコマンドは_sed -i '' 's/* $ //' file_する必要がありました。しかし、私は自分のファイルに空白がないことを確認しました(テキストラングラーではスペースを検索して置き換えません)。しかし、出力ファイルは基本的には入力ファイル全体です!これは不思議ですが、Pythonスクリプトがうまくいきましたので、今問題を解決しました。 – user2662391

答えて

0

これはPythonではかなり簡単です。あなたはkeywords.txtinput.txtファイルを持っているとoutput.txtに出力したいと仮定:

# 1 
with open('keywords.txt', 'r') as k: 
    keywords = k.read().splitlines() 

results = [] 

#2 
with open('input.txt') as f, open('output.txt', 'w') as o: 
    for line in f: 
     if any(key in line for key in keywords): 
      o.writelines(line) 

これはリスト(#1)で、そこから各ラインをキーワードファイルを読み込み、保存します。次に入力ファイルと出力テキストファイルを開き、入力ファイルを1行ずつループし、行のキーワード(#2)を見つけたら出力ファイルに書き出します。

+0

ありがとう@アソルトトルン!これは8行目の 'wb'を 'w'に変更したときに機能します - それはpython2と3のものが集まるかもしれません... – user2662391

+0

@ user2662391 OSの問題、私の間違いかもしれないと思います。それを今修正するために編集、喜んで助けになる:) – asongtoruin

関連する問題