2

バックグラウンド:

一部の CSV ファイルを検索しようとすると問題が発生します。csv モジュール のオブジェクトについて、 http: //docs.python.org/2/library/csv.htmlの Python ドキュメントを確認しました。csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

私の理解ではcsv.DictReader、ファイルの最初の行/行がフィールド名であると想定していますが、私の csv 辞書ファイルは単純に「キー」、「値」で始まり、少なくとも 500,000 行続きます。

私のプログラムは、探しているタイトル (したがってキー) をユーザーに尋ね、print 関数を使用して値 (2 列目) を画面に表示します。私の問題は、 csv.dictreader を使用して特定のキーを検索し、その値を出力する方法です。

サンプル データ: 以下は、csv ファイルとその内容の例です...

"Mamer","285713:13"

"Champhol","461034:2"

"Station Palais","972811:0"

したがって、"Station Palais" (入力) を見つけたい場合、出力は 972811:0 になります。私は文字列を操作してプログラム全体を作成することができます.csv.dictreaderの助けが必要です.

編集部分:

    import csv

    def main():
        with open('anchor_summary2.csv', 'rb') as file_data:
        list_of_stuff = []
        reader = csv.DictReader(file_data, ("title", "value"))
            for i in reader:
              list_of_stuff.append(i)
            print list_of_stuff

    main()
4

2 に答える 2

2

リンク先のドキュメントは、答えの半分を提供します。

クラス csv.DictReader( csvfile、fieldnames=None、restkey=None、restval=None、dialect='excel'、*args、**kwds )

[...] 読み取った情報を、オプションのfieldnamesパラメータによってキーが指定された dict にマップします。fieldnamesパラメータを省略すると、 csvfileの最初の行の値がフィールド名として使用されます。

fieldnamesパラメータが渡された場合、指定されたファイルの最初のレコードがヘッダーとして解釈されないように思われます (代わりにパラメータが使用されます)。

# file_data is the text of the file, not the filename
reader = csv.DictReader(file_data, ("title", "value"))
for i in reader:
  list_of_stuff.append(i)

これは(どうやら;私はそれで問題を抱えていました)次のデータ構造を生成します:

[{"title": "Mamer", "value": "285713:13"},
 {"title": "Champhol", "value": "461034:2"},
 {"title": "Station Palais", "value": "972811:0"}]

次のような方法で、タイトルから値へのマッピングにさらにマッサージする必要がある場合があります。

data = {}
for i in list_of_stuff:
  data[i["title"]] = i["value"]

のキーと値を使用dataしてタスクを完了します。


そして、これは辞書の理解として次のとおりです。

data = {row["title"]: row["value"] for row in csv.DictReader(file_data, ("title", "value"))}
于 2013-05-20T02:22:22.907 に答える