Python | CSVファイルへの書き出し方法

公開日:2021/6/8

Pythonには,コードを記述することによってCSVファイル内に書き出す方法がある.以下「"open"と"close"を利用したファイルへの書き出し」と「"with"を利用したファイルへの書き出し」の2つの構成でファイルの書き出し方法を記す.

◆実施環境

Python 3.8.8

■準備

現在以下URL(カレントディレクトリ)で開発しているので,”210517_python development”フォルダの直下に”test”のいう名のフォルダを作成した.

“PS C:\Users\shiro\Desktop\210517_python development>”

CSVファイルを作成し,書き出すためのファイルパスは以下になる.(準備段階ではCSVファイルは作成されていない)

“test/writing.csv”

  1. “open"と"close"を利用したファイルへの書き出し

ファイルパスと以下(a)~(d)の関数を用いてファイルを様々な方法で書き出すことができる.

(a) write: ”()”に文字列を取り,データを書き出す.

(b) writelines: 各データが連結されて書き出される.

(c) open: “()”には以下主要な引数を入力可能.

・filename: テキストファイルやCSVファイルなどのファイルオブジェクト
・mode: 読み込みには”r”,上書きには”w”,追記には”a”などがある."w"と"a"どちらの場合でもファイルがない場合は新規に作成される.
・compresslevel: modeが”w” or “a”の場合に圧縮レベルを1~9まで指定できる
・encoding: “utf-8″や”shift_jis”などを指定できる
・errors: エラーを返す.デフォルトは”strict”, 他に”replace”, “ignore”などがある
・newline: 改行を指定可能.”None”, 「”」, “\n”, “\r”, “\r\n”を指定できる

(d) close: “open"によりファイルを開き,書き出した後は,"close"によりファイルを閉じる.ファイルを閉じると,余計なメモリを消費するのを防ぐ.

以下に上記関数を用いたファイルの書き出し構文を記述する.

# 1の処理(writeにて書き出し)
fpath = 'test/writing.csv'
greeting = 'Hello World\nI am Jotaro' # 改行には"\n"を利用

f = open(fpath,mode='w',encoding='utf-8')
f.write(greeting) # testフォルダの中にcsvが作成される
f.close() # "open"の後は"close"を利用し,ファイルを閉じる

# 2の処理(writeにて書き出し,その後上書き)
fpath = 'test/writing.csv'
greeting1 = 'Hello World\nI am Jotaro\n'
greeting2 = 'Nice to meet you'

f = open(fpath,mode='w',encoding='utf-8')
f.write(greeting1) # testフォルダの中にcsvが作成される
f.close()

f = open(fpath,mode='w',encoding='utf-8') # 'w'により上書き
f.write(greeting2)
f.close()

# 3の処理(writeにて書き出し,その後追記)
fpath = 'test/writing.csv'
greeting1 = 'Hello World\nI am Jotaro\n'
greeting2 = 'Nice to meet you'

f = open(fpath,mode='w',encoding='utf-8')
f.write(greeting1) # testフォルダの中にcsvが作成される
f.close()

f = open(fpath,mode='a',encoding='utf-8') # 'a'により追記
f.write(greeting2)
f.close()

# 4の処理(writelinesにて書き出し.list内"0")
fpath = 'test/writing.csv'

list1 = [
  ['Hello World\nI am Jotaro'],
  ['Nice to meet you']
]

f = open(fpath,mode='w',encoding='utf-8')
f.writelines(list1[0])
f.close()

# 5の処理(writelinesにて書き出し.list内"1")
fpath = 'test/writing.csv'

list1 = [
  ['Hello World\nI am Jotaro'],
  ['Nice to meet you']
]

f = open(fpath,mode='w',encoding='utf-8')
f.writelines(list1[1])
f.close()

# 6の処理(writelinesとforにて書き出し.list内の値すべて)
fpath = 'test/writing.csv'

list1 = [
  ['Hello World\nI am Jotaro'],
  ['Nice to meet you']
]

f = open(fpath,mode='w',encoding='utf-8')

for x in list1:
  f.writelines(','.join(x))
  f.writelines('\n')

f.close()

■実行結果

# 1の結果(CSVファイルに以下が記述)
Hello World
I am Jotaro

# 2の結果(CSVファイルに以下が記述)
Nice to meet you

# 3の結果(CSVファイルに以下が記述)
Hello World
I am Jotaro
Nice to meet you

# 4の結果(CSVファイルに以下が記述)
Hello World
I am Jotaro

# 5の結果(CSVファイルに以下が記述)
Nice to meet you

# 6の結果(CSVファイルに以下が記述)
Hello World
I am Jotaro
Nice to meet you
  1. “with"を利用したファイルへの書き出し

ファイルの書き出しに”open”を用いると,ファイルを閉じる”close”が必須になる.だが,”with”を利用してファイルを書き出すと,自動的にファイルは閉じる.以下に”with”と”as”を用いた構文を記述する.

# 1の処理
fpath = 'test/writing.csv'

list1 = [
  ['Hello World\nI am Jotaro'],
  ['Nice to meet you']
]

with open(fpath,mode='w',encoding='utf-8') as f: # csvファイルが作成される
  for x in list1:
    f.write(','.join(x))
    f.write('\n')

■実行結果

# 1の結果(CSVファイルに以下が記述)
Hello World
I am Jotaro
Nice to meet you

以上