原因
末尾にコンマが付くのは、CSVファイルに空の値が出力されているためです。
テキストエディタでCSVファイルを開くことで確認できます。
方法A
表計算アプリから出力する際に、必要な列数に範囲を指定します。
CSVファイルに不必要なコンマが含まれなくなります。
メリット
コードを変更する必要がありません。
デメリット
前処理が必要になります。
方法B
行の末尾に空の値が含まれることを前提にして、プログラムで除去します。
メリット
前処理が必要ありません。
デメリット
コードが複雑になります。
方針
- 空値は、行末にのみ出現する(空値以降に有効値は出現しない)ことを前提にします。
- CSVの読み込みは(本論ではないので)、標準のモジュールを使用して済ませます。
- 列数を揃える場合
- 全ての要素を調べて、行ごとに空値でない要素数をカウントします。
- 要素数が最大の行に合わせて、全ての行の要素数を揃えます。
- 列数が不揃いで良い場合
- 行から空値の要素を除去します。
対処と結果
以下でいかがでしょうか?
テストデータ
place2.csv
"department_store","store",,
"art_gallery","cafe",,
"art_gallery","museum","food",
"amuzement_park",,,
列数を揃える場合
code
import csv
with open('place2.csv', encoding="utf-8-sig") as csv_file:
data1 = [l for l in csv.reader(csv_file)]
max_cols = max([len([c for c in l if c != '']) for l in data1]) # 行あたりの最大要素数を算出
data1 = [l[:max_cols] for l in data1] # 行を最大要素数でカット
print(f"data1=\n{data1}\n")
for line in data1:
print(','.join(line))
result
data1=
[['department_store', 'store', ''], ['art_gallery', 'cafe', ''], ['art_gallery', 'museum', 'food'], ['amuzement_park', '', '']]
department_store,store,
art_gallery,cafe,
art_gallery,museum,food
amuzement_park,,
列数が不揃いで良い場合
code
import csv
with open('place2.csv', encoding="utf-8-sig") as csv_file:
data1 = [l for l in csv.reader(csv_file)]
data1 = [[c for c in l if c!= ''] for l in data1] # 空の値を除去
print(f"data1=\n{data1}\n")
for line in data1:
print(','.join(line))
result
data1=
[['department_store', 'store'], ['art_gallery', 'cafe'], ['art_gallery', 'museum', 'food'], ['amuzement_park']]
department_store,store
art_gallery,cafe
art_gallery,museum,food
amuzement_park
Like!