Python入門 - ファイル入出力(テキストファイル)
ファイルIO
この記事では、ファイルIO、つまりファイルの読み書きについて解説したいと思います。ファイルの読み書きができれば、プログラム内部のデータをファイルに保存したり、次回プログラムを起動した時にそのデータを読み込んだりできます。
いわゆるセーブ&ロードもできるようになるというわけです。
テキストファイルの読み込み
まずは、自分が作業しているディレクトリ(pyファイルがあるフォルダ)に、readme.txtというテキストファイルを作成しましょう。テキストファルルの中には、次のようば文字列を書いておきます。
1st line
2nd line
last line
テキストファイルの読み込みには、open関数tを利用します。open関数で開いたファイルからread関数でファイルの中身を読み込みます。open関数の第一引数は「ファイル名」、第二引数は「モード」です。モード'r'は、readモードです。ファイルを使い終わったら、「必ず」ファイルを閉じます。ファイルを閉じるにはclose関数を利用します。
サンプルコード
f = open('readme.txt', 'r')
print(f.read())
f.close()
実行結果
1st line
2nd line
last line
また、read関数は、一度にどれだけ読み込むか指定できます。最後まで読み込み終わると、空行「""」を返します。
サンプルコード
f = open('readme.txt', 'r')
print(f.read(5))
print('----------')
print(f.read(10))
print('----------')
print(f.read(20))
print('----------')
print(f.read(10))
f.close()
実行結果
1st l
----------
ine
2nd li
----------
ne
last line
----------
一行ずつ読み込むには、readline関数を使ったり繰り返しを使います。
サンプルコード
f = open('readme.txt', 'r')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
実行結果
1st line
2nd line
last line
readlineは各行lの最後にある改行文字「¥n」をそのまま残します。そのため、実行結果はファイルの行にある改行とprintの改行で2重に改行されています。
次は繰り返しを使う方法です。
サンプルコード
f = open('readme.txt', 'r')
for s in f:
print(s)
f.close()
実行結果
1st line
2nd line
last line
テキストファイルの書き込み
ファイルにテキストを書き込むには、open関数のモードを'w'(write)にします。'w'はファイルがすでに存在する場合、ファイルを上書きします。ファイルの最後から追記する場合はモードを'a'(append)にします。
また、書き込み用メソッドとしてwriteとwritelinesがあります。writelinesはシーケンスようです。紛らわしいですが、どちらも自動では改行されません。後ろのそのまま連結されていきます。
サンプルコード
f = open('writeme.txt', 'w')
f.write('1st ')
f.write("line\n")
f.writelines(['2nd line\n', 'last line'])
f.close()
f = open('writeme.txt', 'r')
for s in f:
print(s)
f.close()
f = open('writeme.txt', 'w')
f.write('2: 1st line\n')
f.write('2: 2nd line\n')
f.write('2: last line\n')
f.close()
print('-----------')
f = open('writeme.txt', 'r')
for s in f:
print(s)
f.close()
f = open('writeme.txt', 'a')
f.write('3: 1st line\n')
f.write('3: 2nd line\n')
f.write('3: last line\n')
f.close()
print('-----------')
f = open('writeme.txt', 'r')
for s in f:
print(s)
f.close()
実行結果
1st line
2nd line
last line
-----------
2: 1st line
2: 2nd line
2: last line
-----------
2: 1st line
2: 2nd line
2: last line
3: 1st line
3: 2nd line
3: last line
前の入門記事
次の入門記事