Python Works

Pythonで色々プログラミングする

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

 

 

前の入門記事 

次の入門記事