「Python3」CSVファイルの読み込み・書き込み

csv csv

Pythonの標準ライブラリのcsvモジュールはCSVファイルの読み込み・書き込みのためのモジュールになります。
標準ライブラリなので追加でインストールする必要はありません。

CSVファイルの読み込み : csv.reader

‘data/test01.csv’の中身
id name age
1 yuto 21
2 hana 32
3 kenta 45
4 yuta 23
5 fuku 23
6 hiyori 45
7 yui 76
8 mei 54
9 kaho 22

1行ずつリスト型で出力

<ソースコード>
with open('data/test01.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        # 行番号を出力
        print(reader.line_num)
        # 1行ずつリスト型で出力
        print(row) # reader.__next__()で代用可能
<出力結果>
1
['id', 'name', 'age']
2
['1', 'yuto', '21']
3
['2', 'hana', '32']
4
['3', 'kenta', '45']
5
['4', 'yuta', '23']
6
['5', 'fuku', '23']
7
['6', 'hiyori', '45']
8
['7', 'yui', '76']
9
['8', 'mei', '54']
10
['9', 'kaho', '22']
1
['id', 'name', 'age']
2
['1', 'yuto', '21']
3
['2', 'hana', '32']
4
['3', 'kenta', '45']
5
['4', 'yuta', '23']
6
['5', 'fuku', '23']
7
['6', 'hiyori', '45']
8
['7', 'yui', '76']
9
['8', 'mei', '54']
10
['9', 'kaho', '22']

2次元配列リスト型で出力

<ソースコード>
with open('data/test01.csv') as f:
    reader = csv.reader(f)
    l = [row for row in reader]
    pprint.pprint(l)
<出力結果>
[['id', 'name', 'age'],
 ['1', 'yuto', '21'],
 ['2', 'hana', '32'],
 ['3', 'kenta', '45'],
 ['4', 'yuta', '23'],
 ['5', 'fuku', '23'],
 ['6', 'hiyori', '45'],
 ['7', 'yui', '76'],
 ['8', 'mei', '54'],
 ['9', 'kaho', '22']]

1行ずつ辞書型で出力

<ソースコード>
with open('data/test01.csv') as f:
    reader = csv.DictReader(f, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)
    for row in reader:
        print(row)
<出力結果>
OrderedDict([('id', '1'), ('name', 'yuto'), ('age', '21')])
OrderedDict([('id', '2'), ('name', 'hana'), ('age', '32')])
OrderedDict([('id', '3'), ('name', 'kenta'), ('age', '45')])
OrderedDict([('id', '4'), ('name', 'yuta'), ('age', '23')])
OrderedDict([('id', '5'), ('name', 'fuku'), ('age', '23')])
OrderedDict([('id', '6'), ('name', 'hiyori'), ('age', '45')])
OrderedDict([('id', '7'), ('name', 'yui'), ('age', '76')])
OrderedDict([('id', '8'), ('name', 'mei'), ('age', '54')])
OrderedDict([('id', '9'), ('name', 'kaho'), ('age', '22')])

CSVファイルの書き込み : csv.writer

リスト型で書き込み

<ソースコード>
with open('data/test02.csv', mode='w', newline="") as f:
    writer = csv.writer(f)
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['1', 'yuto', '21'])
    writer.writerow(['2', 'hana', '32'])
    writer.writerow(['3', 'kenta', '45'])

with open('data/test02.csv', mode='w', newline="") as f:
    writer = csv.writer(f)
    writer.writerows(
        [
            ['id', 'name', 'age'],
            ['1', 'yuto', '21'],
            ['2', 'hana', '32'],
            ['3', 'kenta', '45']
        ]
    )
<出力結果(’data/test02.csv’の中身)>
id name age
1 yuto 21
2 hana 32
3 kenta 45

辞書型で書き込み

<ソースコード>
with open('data/test04.csv', mode='w', newline="") as f:
    writer = csv.DictWriter(f,fieldnames=['id', 'name', 'age'])
    header = {i : i for i in ['id', 'name', 'age']}
    writer.writerow(header)
    writer.writerows(
        [
            {'id':'1', 'name':'yuto', 'age':'21'},
            {'id':'2', 'name':'hana', 'age':'32'},
            {'id':'3', 'name':'kenta', 'age':'45'}
        ]
    )

with open('data/test05.csv', mode='w', newline="") as f:
    writer = csv.DictWriter(f,fieldnames=['id', 'name', 'age'])
    header = {i : i for i in ['id', 'name', 'age']}
    writer.writerow(header)
    writer.writerow({'id':'1', 'name':'yuto', 'age':'21'})
    writer.writerow({'id':'2', 'name':'hana', 'age':'32'})
    writer.writerow({'id':'3', 'name':'kenta', 'age':'45'})
<出力結果(’data/test03.csv’の中身)>
id name age
1 yuto 21
2 hana 32
3 kenta 45

コメント

タイトルとURLをコピーしました