Python | CSVファイルの読み出し方法

公開日:2021/6/8

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

◆実施環境

Python 3.8.8

■準備

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

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

CSVファイルにアクセスするためのファイルパスは以下になる.

“test/reading.csv"

なお,CSVファイルには,以下を事前に書き込んだ.

Hello World
Good morning
1,2,3,4
こんにちは

  1. “open"を利用してファイルを読み出す

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

(a) read: 全てのデータを読み出す."()"にはサイズを記述できる.

(b) readlines: すべてのデータをリストで読み出す.

(c) readline: 1行だけデータを読み出す.

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

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

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

# 1の処理(ファイル内容すべてを読み出す)
fpath = 'test/reading.csv' # ファイルパス

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

line = f.read() # すべてを読み込むので()内はブランク
print(line)

# 2の処理(ファイル内容の10文字のみ読み出す)
file_path = 'test/reading.csv'

f = open(file_path,mode='r',encoding='utf-8')

line = f.read(10) # 10文字読み出すので,"Hello Worl"が出力
print(line)

# 3の処理(リストにファイル内容をすべて読み出す)
fpath = 'test/reading.csv'

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

lines = f.readlines()
print(lines)

# 4の処理(1行目のみ読み出す:readlineにする)
fpath = 'test/reading.csv'

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

line = f.readline()
print(line)

# 5の処理(ファイル内容を1行ずつ読み出す)
fpath = 'test/reading.csv'

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

line = f.readline()

while line:
  print(line.rstrip('\n'))
  line = f.readline()

# 6の処理(ファイル内容を,セイウチ演算を利用して,1行ずつ読み出す)
fpath = 'test/reading.csv'

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

while (line := f.readline()):
  print(line.rstrip('\n'))

■実行結果

# 1の結果
Hello World
Good morning
1,2,3,4
こんにちは

# 2の結果
Hello Worl
# 3の結果
['Hello World\n', 'Good morning\n', '1,2,3,4\n', 'こんにちは\n', '\n']

# 4の結果
Hello World

# 5の結果
Hello World
Good morning
1,2,3,4
こんにちは

# 6の結果
Hello World
Good morning
1,2,3,4
こんにちは
  1. “close"を利用してファイルを閉じる

ファイルを開けたままにしておくと,メモリを浪費したり,他の処理でファイルを開けなくなる可能性がある.そのため,ファイルを閉じる関数である"close()"を利用する.以下にclose関数を用いた,ファイルを閉じる構文を記述する.

# 1の処理
fpath = 'test/reading.csv' # ファイルパス

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

line = f.read()
print(line) # 処理は実行される

f.close() # ファイルを閉じる処理

line = f.read()
print(line) # ファイルが閉じているため,エラーが出力

■実行結果

# 1の結果
Hello World
Good morning
1,2,3,4
こんにちは

ValueError: I/O operation on closed file.
  1. “with"を利用してファイルを読み出す

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

# 1の処理(withを用いた構文)
fpath = 'test/reading.csv'
f = open(fpath,mode='r',encoding='utf-8')

with open(fpath,mode='r',encoding='utf-8') as f:
  line = f.read()
  print(line)

# 2の処理(withを用いた構文, 構文外はエラー出力)
fpath = 'test/reading.csv'
f = open(fpath,mode='r',encoding='utf-8')

with open(fpath,mode='r',encoding='utf-8') as f:
  line = f.read()
  print(line) # 処理は実行される

line = f.read()
print(line) # ファイルが閉じているため,エラーが出力

■実行結果

# 1の結果
Hello World
Good morning
1,2,3,4
こんにちは

# 2の結果
Hello World
Good morning
1,2,3,4
こんにちは

ValueError: I/O operation on closed file.

以上