2016-07-04 10 views
0

私はプログラミングにはとても新しいので、テキストファイルからデータを抽出するためのコードを作成しています。私はこれを行うことができましたが、データはExcelで私にとって役に立ちません。したがって、私はそれをすべて1行に印刷し、それを特殊文字で区切ります。これをExcelで区切ります。ここで一行で印刷できませんPython 3

は私のコードです:

import os 
data=['Find me','find you', 'find us'] 
with open('C:\\Users\\Documents\\File.txt', 'r') as inF: 
    for line in inF: 

     for a in data: 
      string=a 

      if string in line: 

       print (line,end='*') #print on same line 

    inF.close() 

だから、基本的に私がやっているキーワードは、その行にある場合に発見し、それがある場合は、その行を印刷しています。

私はprint(、end = '*')を持っていても、1行で印刷することはできません。出力:

Find me 

*find you 

*find us 

問題はどこですか? (私はPython 3.5.1を使用しています)

答えて

1

すぐに問題が発生するのは、改行文字を印刷する前に行から削除していないことです。あなたの特別なフレーズの複数の行に表示された場合

print(line.strip(), end='*') 

あなたはまた、ラインの複数のコピーを印刷します:これを行うための通常の方法は、例えば、strip()です。これを避けるには、印刷後にbreakステートメントを追加するか、(ただし、ジェネレータ式に使用されるまで意味をなさない高度な構文を使用してください)if any(keyword in line for keyword in data):

明示的に閉じる必要はありません入力ファイル - with open(...) as ...:コンテキストマネージャのポイントは、ファイルを終了するときにファイルを閉じることです。

そして変数名としてstringを使用することは避けられます。変数が何に使用されているかは誰にも知らされず、組み込みのstringモジュールを使用すると混乱を招く可能性があります。 listのようなビルトインコンストラクタをシャドーイングするほど悪くはありませんが、避けることは価値があります。特にここでは何もしませんので、上記のany()バージョンを使用しない場合は、if a in line:をここで使用してください。

データが極端に大きくない場合(そして、すべてを1行に収めようとしていないのであれば)、より洗練されたコードが得られ、文字列の.join()メソッド:

import os 
data=['Find me','find you', 'find us'] 
with open('C:\\Users\\Documents\\File.txt', 'r') as inF: 
    print "*".join(line.strip() for line in inF if any(keyword in line for keyword in data)) 
+0

ああ、それはとても簡単です! あまりにも余分なアドバイスをありがとう! – micuzzo

+0

スプレッドシートとPythonで多くの作業を行っている場合は、組み込みの 'csv'モジュールを見てください。あなたが扱っているとき区切られたファイルで。 –

+0

ええ、私はそれをもっと調べてきましたが、このやや厄介なやり方はすばやい結果を得るために行われました。しかし、もう一度ありがとう! – micuzzo

関連する問題