2016-05-01 6 views
-1

で行全体を印刷し、その後、CSVファイル内の特定のフィールドを検索しますが、それはので、私は例を提供しますが長すぎる:どのように私は私の全体のプログラムが含まれるPythonの

は、私は、このcsvファイルを持っていたと言います:

John, 23, 1944, Africa 
Fred, 45, 1922, China 
Bob, 23, 1999, Japan 

ファイルを検索して1944の行を印刷するにはどうすればよいですか? は基本的に私はそれがやりたいことは1944年を見つけることです、その後、1944年がである行全体を印刷する。

をまた、あなたが見つかった行を加えた一番上の行などを印刷する方法を

Name, Age, Year, Nation 
John, 23, 1944, Africa 
Fred, 45, 1922, China 
Bob, 23, 1999, Japan 

のような構造だ場合まあ?

多くのありがとうございます。

編集: なぜダウン投票が必要ですか?私は合法的にこれに関する情報を見つけることができません。だから私は尋ねなければならない。

+2

PythonはCSVファイルを解析するための 'csv'モジュールを持っています。ドキュメンテーションには例が含まれており、そのモジュールの多くの例がオンラインで(SOの他の場所を含めて)存在しています。これまでに試したことを私たちに教えてください。文書が不明確な箇所や、コードの動作を理解できないところを教えてください。 – larsks

+0

私は何をしようとしているのか、まったく成功していませんでした。私が理解していることから、私はそれをどうやって行うのか分かりません。私は現在、csvモジュールをうまく使っています。例えば、私のプログラムは与えられた入力を追加し、与えられたx、y座標を見つけることができますが、ユーザが入力した値を検索してその行全体を印刷する方法はわかりません。 –

答えて

0

このプログラムはあなたの最初の質問に答える:

import csv 
import sys 

with open('csv1.txt') as fp: 
    reader = csv.reader(fp, skipinitialspace=True) 
    writer = csv.writer(sys.stdout) 
    writer.writerows(row for row in reader if row[2] == '1944') 

を、これはあなたの2番目の質問に答える:

import csv 
import sys 

with open('csv2.txt') as fp: 
    top_row = next(fp) 
    sys.stdout.write(top_row) 
    reader = csv.reader(fp, skipinitialspace=True) 
    writer = csv.writer(sys.stdout) 
    writer.writerows(row for row in reader if row[2] == '1944') 
+0

skipinitialspaceとsys.stdoutは簡単に言えば何をしていますか? –

+0

最初の[区切り文字の直後の空白を無視する](https://docs.python.org/2/library/csv.html#csv.Dialect.skipinitialspace)、2番目の["はインタープリタの標準出力に対応しますstream "](https://docs.python.org/2.7/library/sys.html#sys.stdin)。 –

+0

こんにちは、私はこの仕事をするために最善を尽くしていますが、これを使用して印刷するための出力がないようです。さらに、なぜ私はそれを検索し、行を印刷し、何も変えていないだけなら、ライター機能を使用していますか?私はちょっと混乱しています、申し訳ありません。 –

関連する問題