ファイルの作成と読み書き
モードを指定してファイルを開く
まず、ファイルを開くには2つの方法がある。例えば sample.txt という名前のファイルを開くコードは以下のようになる。
# 方法①
f = open("sample.txt")
print(type(f))
# <class '_io.TextIOWrapper'>
f.close()
# 方法②
with open("sample.txt") as f:
print(type(f))
# <class '_io.TextIOWrapper'>
方法①では open() でファイルオブジェクトを作成し、close() で閉じている。close() を付けるのが煩わしければ方法②のように with ブロックを使う方法もある。
ファイルを開くときに以下のモードを指定して開くことができる。
-
- r:読み取りモード
- w:書き込みモード
- a:追記モード
- x:新規作成モード
このように指定することでファイルの中身を誤って消してしまったり、上書きしてしまったりする悲しい事故を減らすことができる。
ファイルに書き込む
sample.txt という名前のファイルに十二支の名前を書き込むプログラムは以下のように書ける。
Zodiac = ["mouse", "ox", "tiger", "rabbit", "dragon", "snake", "horse", "sheep", "monkey", "cock", "dog", "boar"]
fname = "sample.txt"
with open(fname, mode="w") as file:
for s in Zodiac:
file.write(s+"\n")
ファイルは「書き込みモード」として開いている。書き込みにはwriteメソッド、もしくはリストを書き込むwritelines()メソッドを使う。いずれも自動では改行されないことに注意。
ファイルの中身を読み込む
以下のデータセットはとある試験の結果である。
score people % 895~ 2053 96.2 845~ 2626 91.3 795~ 3626 84.5 745~ 4388 76.3 695~ 4941 67.1 645~ 5356 57.1 595~ 5662 46.5 545~ 5640 35.9 495~ 5002 26.6 445~ 4476 18.2 395~ 3681 11.4 345~ 2841 6.1 295~ 1833 2.6 245~ 963 0.8 195~ 365 0.2 145~ 68 0 95~ 11 0 45~ 3 0 10~ 4 0
このファイルを読み込むには次のようにする。
fname = "sample_data.txt" f = open(fname,"r") for line in f.readlines(): choped_line = line[:-1] print(choped_line) f.close()
f.readlines()でファイル全体をリストとして読み込む。1行ずつ読み込みたい場合はf.readline()を用いる(←単数形であることに注意!)。line[:-1]としているのは末尾の改行を取り除くためである。
1行ずつ読み込むには以下のようにする。
fname = "sample_data.txt"
with open(fname) as f:
while True:
line = f.readline()
if line == '' :
break
print(line[:-1])
f.readline()メソッドで読み込んだ時に最終行まで辿り着くと空文字列''が返される。最終行かどうかのif文の条件はif not line:としても判定可能。
以下のようにwithブロックを使う方法も考えられる。
fname = "sample_data.txt"
with open(fname, mode="w") as f:
for line in f.readlines():
choped_line = line[:-1]
print(choped_line)
また、forブロックで以下のようにまとめて書くこともできる。
fname = "sample_data.txt"
for line in open(fname,"r").readlines():
choped_line = line[:-1]
print(choped_line)
openの引数にファイルのパスを直接渡すようにすれば3行に収まる。
