はじめに
Pythonでtextファイルの読み書きする際、大雑把に3種類の方法を使うことができる。
- すべてを
strとして扱う - すべてを
listとして扱う - 一行ずつ扱う
このようなtextファイルを準備したとする。
input.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
すべてをstrとして扱う
一番直感的なやり方?
ファイルの全内容をstrとして一つの変数に格納する。
# ファイルを読み込む
inputfile = "input.txt"
with open(inputfile, mode="r", encoding="utf8") as f:
data = f.read()
# 処理する
print(data)
# 出力する
outputfile = "output.txt"
with open(outputfile, mode="w", encoding="utf8") as f:
f.write(data)
dataは一つのstrとして扱われる。
aaaaa
bbbbb
ccccc
ddddd
eeeee
すべてをlistとして扱う
同じ形式のデータ形式が複数セクション分縦に積まれているような形式のtextファイルを読む際、セクションごとに分割して読みたいニーズがあるため、個人的には一番よく使っている。
f.readがf.readlinesになり、f.writeがf.writelinesになっただけである。
# ファイルを読み込む
inputfile = "input.txt"
with open(inputfile, mode="r", encoding="utf8") as f:
data = f.readlines()
# 処理する
print(data)
# 出力する
outputfile = "output.txt"
with open(outputfile, mode="w", encoding="utf8") as f:
f.writelines(data)
dataは行ごとのstrを要素として持つlistとして扱われ、改行も含んだ状態で読み込まれる。
['aaaaa\n', 'bbbbb\n', 'ccccc\n', 'ddddd\n', 'eeeee']
一行ずつ扱う
でかいファイルを扱い、ヘッダー情報をキャッチしたら終わるなどという使い方をたまにする。for文で回し一行図ずつ取得する。
# ファイルを読み込む
inputfile = "input.txt"
with open(inputfile, mode="r", encoding="utf8") as f:
for line in f:
# 読むたびに行が進む
print(line)
行ごとにprintさせている。
aaaaa
bbbbb
ccccc
ddddd
eeeee