Python で CSV ファイルの読み書きを実装する

シェアする

IT・Web業界での転職への転職を考えていれば⇨IT・Web業界での転職なら【レバテックキャリア】

Python で CSV ファイルの読み書きを実装します。

CSV ファイルは様々な用途で利用するファイル形式です。Python では標準の csv モジュールがありますので、サードパーティのパッケージ不要で、CSV ファイルの読み書きをすることができます。

CSV は、Comma Separated Values (カンマ区切りの値)が正式名称って、意外に知らない人多いんですよね。

バージョン

  • Python 3.5.4

実装

CSV ファイルの読み込み

import csv

'''
$ cat example.csv
4/5/2014 13:34,Apples,73
4/5/2014 3:41,Cherries,85
4/6/2014 12:46,Pears,14
4/8/2014 8:59,Oranges,52
4/10/2014 2:07,Apples,152
4/10/2014 18:10,Bananas,23
4/10/2014 2:40,Strawberries,98
'''

example_file = open('example.csv')
example_reader = csv.reader(example_file)
example_data = list(example_reader)

print(example_data[0][0]) # 4/5/2014 13:34
print(example_data[0][1]) # Apples
print(example_data[0][2]) # 73
print(example_data[1][1]) # Cherries
print(example_data[6][1]) # Strawberries
#print(example_data[10][10]) # IndexError: list index out of range
example_file.close()

example_file = open('example.csv')
example_reader = csv.reader(example_file)
# CSVデータの読み込み
for row in example_reader:
    print('Row #' + str(example_reader.line_num) + ' ' + str(row))

CSV ファイルの読み込みは、まず最初に、ファイルを open し、reader 関数にファイルオブジェクトを渡します。

その後のデータのアクセス方法としては、list に変換してインデックスでアクセスする方法と for でアクセスする方法の2つを実装しました。

list に変換する方法は、インデックス指定ができて便利ですが、一度にデータを読み込みます。なので、ファイルサイズによっては、大量にメモリを消費する可能性がありますので、注意が必要です。

CSV ファイルの書き込み

# CSVファイルの作成
output_file = open('output.csv', 'w')
output_writer = csv.writer(output_file)
output_writer.writerow(['spam', 'eggs', 'bacon', 'ham'])
output_writer.writerow(['Hello, world!', 'eggs', 'bacon', 'ham'])
output_writer.writerow([1, 2, 3.141592, 4])
output_file.close()

CSV ファイルの書き込みは、まず最初に、書き込みオプションをつけてファイルを open し、writer 関数にファイルオブジェクトを渡します。

その後のデータの書き込み方法としては、一行ずつデータを書き込む writerow 関数を実装しました。

TSV ファイルの書き込み

# TSVファイルの作成
csv_file = open('example.tsv', 'w')
csv_writer = csv.writer(csv_file, delimiter='\t')
csv_writer.writerow(['apples', 'oranges', 'grapes'])
csv_writer.writerow(['eggs', 'bacon', 'ham'])
csv_writer.writerow(['spam', 'spam', 'spam'])
csv_file.close()

writer 関数の引数の delimiter オプションで区切り文字が指定できるので、’\t’ を渡すと、タブ区切りの TSV ファイルを作成することができます。

プログラム全体

import csv

'''
$ cat example.csv
4/5/2014 13:34,Apples,73
4/5/2014 3:41,Cherries,85
4/6/2014 12:46,Pears,14
4/8/2014 8:59,Oranges,52
4/10/2014 2:07,Apples,152
4/10/2014 18:10,Bananas,23
4/10/2014 2:40,Strawberries,98
'''
example_file = open('example.csv')
example_reader = csv.reader(example_file)
example_data = list(example_reader)

print(example_data[0][0]) # 4/5/2014 13:34
print(example_data[0][1]) # Apples
print(example_data[0][2]) # 73
print(example_data[1][1]) # Cherries
print(example_data[6][1]) # Strawberries
#print(example_data[10][10]) # IndexError: list index out of range
example_file.close()

example_file = open('example.csv')
example_reader = csv.reader(example_file)
# CSVデータの読み込み
for row in example_reader:
    print('Row #' + str(example_reader.line_num) + ' ' + str(row))

# CSVファイルの作成
output_file = open('output.csv', 'w')
output_writer = csv.writer(output_file)
output_writer.writerow(['spam', 'eggs', 'bacon', 'ham'])
output_writer.writerow(['Hello, world!', 'eggs', 'bacon', 'ham'])
output_writer.writerow([1, 2, 3.141592, 4])
output_file.close()

# TSVファイルの作成
csv_file = open('example.tsv', 'w')
csv_writer = csv.writer(csv_file, delimiter='\t')
csv_writer.writerow(['apples', 'oranges', 'grapes'])
csv_writer.writerow(['eggs', 'bacon', 'ham'])
csv_writer.writerow(['spam', 'spam', 'spam'])
csv_file.close()

ここまで説明してきた内容を sample.py という名前で保存しました。

動作確認

プログラムの実行

$ python sample.py
4/5/2014 13:34
Apples
73
Cherries
Strawberries
Row #1 ['4/5/2014 13:34', 'Apples', '73']
Row #2 ['4/5/2014 3:41', 'Cherries', '85']
Row #3 ['4/6/2014 12:46', 'Pears', '14']
Row #4 ['4/8/2014 8:59', 'Oranges', '52']
Row #5 ['4/10/2014 2:07', 'Apples', '152']
Row #6 ['4/10/2014 18:10', 'Bananas', '23']
Row #7 ['4/10/2014 2:40', 'Strawberries', '98']

sample.py を実行すると、CSV ファイルを読み込み、その内容を出力します。

また、CSV ファイルの書き込みとTSV ファイルの書き込み結果については、以下の通りとなります。

CSV ファイルの書き込み結果

$ cat output.csv
spam,eggs,bacon,ham
"Hello, world!",eggs,bacon,ham
1,2,3.141592,4

TSV ファイルの書き込み結果

$ cat example.tsv
apples  oranges grapes
eggs    bacon   ham
spam    spam    spam

まとめ

Python で CSV ファイルの読み書きを実装しました。

他にも複数行の書き込みができる writerows 関数や、データを辞書型で扱うことができる DictReaderDictWriter などがありますので、一度公式のドキュメントに目を通すことをお勧めします。

シェアする

フォローする