次の Excel スプレッドシートがあるとします。

ノート:
- C2 の複数行セル。
- C1 と D3 に埋め込まれたコンマ。
- 空白のセル、および D4 にスペースがあるセル。
これを Excel で CSV として保存すると、次の csv ファイルが得られます。
A1,B1,"C1,+comma",D1
,B2,"line 1
line 2",D2
,,C3,"D3,+comma"
,,,D4 space
おそらく、空白のセルがまだ意味を持ち、埋め込まれたコンマが正しく処理された状態で、それを Python に読み込みたいと思うでしょう。
したがって、この:
with open("test.csv", 'rU') as csvIN:
outCSV=(line for line in csv.reader(csvIN, dialect='excel'))
for row in outCSV:
print("Length: ", len(row), row)
Excel で表されるリスト マトリックスの 4x4 リストを正しく生成します。
Length: 4 ['A1', 'B1', 'C1,+comma', 'D1']
Length: 4 ['', 'B2', 'line 1\nline 2', 'D2']
Length: 4 ['', '', 'C3', 'D3,+comma']
Length: 4 ['', '', '', 'D4 space']
投稿した CSV ファイルの例では、フィールドの周りに引用符がなく、「余分な改行」があり、その改行の意味があいまいになっています。新しい行ですか、それとも複数行のフィールドですか?
そのため、次の csv ファイルのみを解釈できます。
A, B, C, D, E, F
123, 456, tree
, very, bla, indigo
次のような一次元リストとして:
with open("test.csv", 'rU') as csvIN:
outCSV=[field.strip() for row in csv.reader(csvIN, delimiter=',')
for field in row if field]
この一次元リストを生成するもの:
['A', 'B', 'C', 'D', 'E', 'F', '123', '456', 'tree', 'very', 'bla', 'indigo']
これは、必要に応じて解釈し、任意のサブ グループに再グループ化できます。
Python の慣用的な再グループ化方法では、次のようにzipを使用します。
>>> zip(*[iter(outCSV)]*6)
[('A', 'B', 'C', 'D', 'E', 'F'), ('123', '456', 'tree', 'very', 'bla', 'indigo')]
または、リストのリストが必要な場合は、これも慣用的です。
>>> [outCSV[i:i+6] for i in range(0, len(outCSV),6)]
[['A', 'B', 'C', 'D', 'E', 'F'], ['123', '456', 'tree', 'very', 'bla', 'indigo']]
CSV ファイルの作成方法を変更できれば、解釈があいまいになりにくくなります。