2017-07-09 1 views
-1

私はCSVファイルを持っていますので、2つの異なるリストのキーワードに基づいてそれぞれを別のファイルに抽出します。つまり、プログラムは元のファイルのすべての行と最初のリストのキーワードを一致させ、一致が見つかるまでその行を書き込む必要があります。一度一致が見つかると、それは実行を中断するはずです。プログラムがcsvファイルの最後の行に達しても一致しない場合は、2番目のリストとマッチングを開始し、同じことを繰り返す必要があります。 私は最初のリストに優先順位をつけたいと思います。一致するものがなければ、2番目のリストを使ってプロセスを開始してください。最初のリストの項目に優先順位を付けた2つのリストに基づいてcsvファイルからデータを抽出します

import os 
from tqdm import * 
import time 
import pandas as pd 
import numpy as nb 
line = fr.readline() 
fr = open('d:\\srcfile1') 
fw = open('destfile1', 'w') 
found=False 
while line: 
     line = fr.readline() 
     if any (item.lower() in line.lower() for item in fruit): 
      found=True 
      fw.close() 
      break 
     elif any (item.lower() in line.lower() for item in veg) and found==False: 
      fw.close() 
      break 
     fw.writelines(line) 

fr.close() 
fw.close() 

コードから目的の結果は次のようになります。

The first list fruit=['orange', 'apple', 'grape', 'banana','phone', 'TV', 'w'] 
The second list veg=['tomato','potato','onion'] 

は、次の私は、Pythonのコード、次の書かれている

paper 
wood 
plastic 
fire 
water 
house 
onion 
ginger 
mints 
banana 
TV 
watermelon 
phone 
pepper 

srcfile1と呼ばれるファイルの1の内容のサンプルです:

paper 
wood 
plastic 
fire 
water 
house 
onion 
ginger 
mints 

しかし、このコードを実行すると、両方のリストの要素と一致するだけで、果物リストに優先順位は与えられません。それは単に次の出力を与えるだけです:

paper 
wood 
plastic 
fire 
water 
house 

誰かが私を助けることができたら、私は感謝します。

+0

その後、私は目標を理解することはわからないんだけど、あなたは、元のCSVで二回ループするリストが必要な場合がありますので、多分リストに結果を格納し、検索ループを実行してキーワードを見つけたり、見つけた場合はブレークしたり、2番目のリストをループしてください。 – PRMoureu

+0

あなたの 'fruit'と' veg'はあなたの出力に対応していません。なぜあなたのoutfile 'fw.close()'をいつも閉じていますか? –

+0

私が欲しいのは、最初のリストにあるキーワードが最初に出現したときに停止することです。何も見つからない場合は、2番目のリストと同じものを試してください。 – Bander

答えて

0

私はこれが大文字でないfruitsリストに存在しないラインもラインを書くために、あなたは何を意味するのかと思い、あなたの結果

fruits = {fruit.lower() for fruit in fruits} 
with open('d:\\srcfile1') as f: 
     data = {key.lower() for key in f.read().split('\n')} 
data.intersection(fruits) 
+0

は、順序を変更して重複を削除します。しかし少し曖昧な質問...それは解決策かもしれません! –

+0

これはキーワードなので、ユニークであると考えられ、この問題の順序は重要ではないと思います。 – Mikedev

+0

実際には、注文を保存する必要もあります。 – Bander

0

を見つけるために設定し、交差法使用することをお勧めset intersetionとsortedのキーを使用してlines indexとすることができます。

import os 
import time 
import pandas as pd 
import numpy as nb 
fr = open('d:\\srcfile1') 
lines = fr.readlines() 
lines = [line.strip() for line in lines if line.islower() ] 
output = sorted(set(lines) - set(fruit).intersection(set(lines)), key=lines.index) 
fw = open('destfile1.txt', 'w') 
for line in output: 
    fw.write(line+'\n') 
fw.close() 

出力:

 
paper 
wood 
plastic 
fire 
water 
house 
onion 
ginger 
mints 
watermelon 
pepper 
+0

実際に私が必要とするのは、最初のリストからキーワードが出現するまで、ファイルを反復することです。一致がなければ、2番目のリストを使って繰り返します。大文字小文字は重要ではありません。もちろん、ファイル内の順序を保持する必要があります。 – Bander

+0

一致するものがあればどうなりますか? – Dark

+0

一致がある場合は、反復処理を停止する必要があります。しかし、最初のリストと一致するものを見つけずにファイルの終わりに達した場合は、ファイルを反復して2番目のリストのキーワードと一致させる必要があります。 – Bander

関連する問題