===== ファイル処理 =====
==== 基本形 ====
基本形2の場合、withブロックの終了時、暗黙的にclose()が実行されため、close()の呼び出しが不要となる。
# 基本形1
f = open("ファイル名", "モード") # ファイルオープン
l = f.readlines() # ファイル操作
f.close() # ファイルクローズ
# 基本形2
with open("ファイル名", "モード") as f # ファイルオープン
l = f.readlines() # ファイル操作
=== モード ===
省略した場合、"rt"が適用される
^ モード ^ 説明 ^
| r | 読み込み。 |
| w | 書き込み。 |
| x | 新規作成。ファイルが存在する場合、エラーとなる。 |
| a | 追記書き込み。 |
| + | 読み書き両方。 |
| t | テキストファイル。r,w,x,a,+と組み合わせて指定。 |
| b | バイナリファイル。r,w,x,a,+と組み合わせて指定。 |
=== encodingオプション ===
PythonはUTF-8をデフォルトとする。UTF-8以外の文字コードを読み込む場合はeoncodingオプションを指定する。
^ 値 ^ 別名 ^ 説明 ^
| shift_jis | shiftjisi, sjis | シフトJIS |
| cp932 | 932, ms932, mskanji, ms-kanji | Windows用のシフトJIS |
| euc-jp | eucjp, ujis, u-jis | EUC-JP |
| iso2022_jp | iso2022jp, iso-2022-jp | JIS |
with open("test.txt", encoding='shift-jis') as f:
l = f.readlines()
=== newlineオプション ===
newlineオプションにより、改行コードを指定することができる。
^ 値 ^ 説明 ^
| \r | CR |
| \n | LF |
| \r\n | CRLF |
with open("test.txt", encoding='shift-jis', newline='\r\n') as f:
l = f.readlines()
==== ファイル操作メソッド ====
^ メソッド ^ 説明 ^
| read() | 終端まで読み込む。 |
| read(長さ) | 指定した長さだけ読み込む。 |
| readline() | 1行読み込む。 |
| readline(長さ) | 指定した長さだけ1行読み込む。 |
| readlines() | 1行ずつリストにし、全量読み込む。 |
| seek(先頭からの位置) | 指定した場所に読み込み位置を移動する。 |
| tell() | 現在の読み込み位置を取得する。 |
| truncate(長さ) | ファイルを指定した長さに切り捨てる。長さ省略時、ファイルの内容を全削除する。 |
| write(データ) | データを書き込む。 |
| writelines(リスト) | リストで構成されたデータを書き込む。 |
=== 読み込み ===
# 1行毎にリストにして読み込み
with open("test.txt") as f:
l = f.readlines()
print(l)
# 1行ずつ読み込み
with open("test.txt") as f:
while True:
l = f.readline()
print(l)
if not l:
break
=== 書き込み ===
#書き込み
with open("test.txt", "w") as f:
f.write("abc\n")
==== CSVの読み書き ====
=== 読み込み ===
import csv
with open("test.csv") as f:
reader = csv.reader(f)
for l in reader:
print(l)
=== 書き込み ===
import csv
datas = [ [1, 2, 3], [4, 5, 6] ]
# 全量書き込み
with open("test1.csv", "w") as f:
writer = csv.writer(f)
writer.writerows(datas)
# 1行書き込み
with open("test2.csv", "w") as f:
writer = csv.writer(f)
for data in datas:
writer.writerow(data)