CSVとは

・「Comma-Separated Values」の略で、データの項目をカンマ区切りでならべる形式です。
・CSV形式を使うと、テキストで簡易的な表を表現できます。
・CSV形式では、1行で1つのデータを表現し、データの各項目をカンマ(,)区切りでならべます。
・各項目が何を表しているのかを明示するために、1行目に項目名(ヘッダー行)を書くこともあります。


TSVファイルとは
・区切り文字にはカンマ以外にも、タブ文字など、他の文字が使われることもあります。
・タブ文字を使った場合、TSVファイル(TSV: Tab-Separated Values)とも呼ばれます。
・Pythonでタブ文字は"バックスラッシュt"で表します。


CSVファイルにヘッダー行がある場合、プログラムで処理するときは使わないこともあります。
ヘッダー行を使わない場合は、1行目を読み飛ばせばよいです。
readline()はファイルを1行分を読み込むメソッドです。
このメソッドを使用した後にファイルを読み込むと、次の行から読み込まれます。
以下のようにすれば1行目(ヘッダー行)を読み飛ばせます。

with open("input/item.csv", encoding="utf-8") as f:
    # ヘッダー行を読み飛ばす
    f.readline()
    # 2行目以降を処理
    for row in f:
        # 末尾の改行を除去
        row = row.rstrip()
        # カンマ区切りで分割して表示
        print(row.split(","))

なお、readline()も読み込んだ文字列を取得できますが、上記の例では1行読み飛ばす目的で使用しているため、特に変数への代入などは行っていません。

tsvファイルはタブで区切っているので「バックスラッシュ+t」で区切る
with open("input/item.tsv", encoding = "utf-8") as f:
    f.readline()
    for row in f:
        row = row.rstrip()
        print(row.split("\t"))


リストの値をCSVファイル形式に変更してCSVファイルに保存するためにはリストをjoinで文字列に結合する

文字列を区切り文字で結合 - join()
join()メソッドは、「文字列のリスト」を「区切り文字」で1つの文字列として結合します。

使い方は区切り文字.join(文字列のリスト)です。

join()メソッドを使うと、処理結果をCSV形式などで保存できます。

join()メソッドの注意点
join()メソッドで結合できるのは、リストの要素がすべて文字列の場合のみです。

以下のようにリストに数値が混ざっていると、エラー(TypeError)になります。
リストに文字列以外の要素が混ざっている場合は、その要素をstr()などで文字列に変換する必要があります。

# 商品データ
items = [
    # 商品名, 価格, メーカー
    ["天然水", 100, "さとう食品"],
    ["りんごジュース", 120, "すずき飲料"],
    ["カフェラテ", 150, "すずき飲料"],
]

# ファイルに書き込む
with open("output/my_item.csv", "w", encoding = "utf-8") as f:
    for item in items:                     ※一行ずつ取り出すためにはfor文が必要
        row = ",".join([item[0], str(item[1]), item[2]])     ※数値は文字列に変更するためにstr()で囲う必要がある。配列示すためにリストを[]囲む
        f.write(f"{row}\n")

print("書き込み完了")

 

標準ライブラリー csv を使って read_csv、write_csv の処理を置き換えました。

import csv

read_csv => csv.DictReader
write_csv => csv.DictWriter


csv.DictReader の使い方は今までの read_csv と同じです。
csv.DictWriter は少し違って、データの書き込みに writer.writerows(...) メソッドを使います。

with open('output/sales.csv', ...) as f:
    writer = csv.DictWriter(f, ['item_id', 'item_name'])
    writer.writerows([
        {'item_id': '1', 'item_name': '商品名'},
        ...
    ])