7

行と列のヘッダーを持つ CSV テーブルを作成してみましょう。

, "Car", "Bike", "Boat", "Plane", "Shuttle"
"Red", 1, 7, 3, 0, 0
"Green", 5, 0, 0, 0, 0
"Blue", 1, 1, 4, 0, 1

行と列のヘッダーを取得したい、つまり:

col_headers = ["Car", "Bike", "Boat", "Plane", "Shuttle"]
row_headers = ["Red", "Green", "Blue"]
data = [[1, 7, 3, 0, 0],
        [5, 0, 0, 0, 0],
        [1, 1, 4, 0, 1]]

もちろん、私は次のようなことができます

import csv
with open("path/to/file.csv", "r") as f:
    csvraw = list(csv.reader(f))
col_headers = csvraw[1][1:]
row_headers = [row[0] for row in csvraw[1:]]
data = [row[1:] for row in csvraw[1:]]

...しかし、十分に Pythonic に見えません。

この自然な操作のためのより良い方法はありますか?

4

5 に答える 5

4

をご覧くださいcsv.DictReader

fieldnames パラメータを省略すると、csvfile の最初の行の値がフィールド名として使用されます。

その後、あなたはただ行うことができますreader.fieldnames. もちろん、これは列ヘッダーのみを提供します。行ヘッダーを手動で解析する必要があります。

ただし、元のソリューションはかなり良いと思います。

于 2012-11-10T18:38:53.590 に答える
0

このソリューションでは、要求されたものとは別の出力形式が提供されることを認識していますが、非常に便利です。これにより、csv行が辞書に読み込まれます。

reader = csv.reader(open(parameters_file), dialect)

keys = [key.lower() for key in reader.next()]
for line in reader:
    parameter = dict(zip(keys, cells))
于 2012-11-10T20:17:41.417 に答える