ファイル操作
ファイル出力
# ファイル出力
f = open( "test.txt", "w" )
try:
# 文字列を出力
f.write( "test" )
#=> test
# イテレータ尽付きのものはwritelinesでまとめて出力
f.writelines( ["1", "2", "3", "4", "5"] )
#=> test12345
finally:
f.close()
# 追記モードで出力
f = open( "test.txt", "a" )
try:
# 文字列を出力
f.write( "test" )
#=> test12345test
finally:
f.close()
# 読み込みモードで実行するとエラーになる
f = open( "test.txt", "r" )
try:
# 文字列を出力
f.write( "test" )
#=> IOError: not writable
finally:
f.close()
ファイル読込み
あらかじめ、同一階層に「test.txt」というファイルを用意し、中に以下の文字列が記載されているものとする。
abc
def
ghi
abc
def
ghi
f = open( "test.txt", "r" )
try:
# readは全読込み
print( f.read() )
#=> abc\ndef\nghi
# ファイルポインタが最後まで行ってしまっているので、先頭に戻す
f.seek( 0 )
# readlinesは改行で区切ったlistを返す
print( f.readlines() )
#=> ['abc\n', 'def\n', 'ghi']
# 3文字目にファイルポインタを移してreadしてみる
f.seek( 2 )
print( f.read() )
#=> c\ndef\nghi
# size指定しつつ少しずつ読み込む(5byteずつ読み込む例)
# 読み終わると空文字を返すので、そこでbreak
f.seek( 0 )
while True:
buf = f.read( 5 )
if not buf:
break
print( buf + ", ", end="" )
#=> abc\nd, ef\ngh, i,
# readlineで一行ずつ読み込む
# 最後の改行コードもlineに含まれます
f.seek( 0 )
while True:
line = f.readline()
if not line:
break
print( line + ", ", end="" )
#=> abc\n, def\n, ghi,
finally:
f.close()
ファイル操作時のモード
r : 読み込み
w : 書き込み
a : 追記
+ : 読み書き両方を指定したい場合に使用
t : テキストモード(デフォルト)
b : バイナリモード
w : 書き込み
a : 追記
+ : 読み書き両方を指定したい場合に使用
t : テキストモード(デフォルト)
b : バイナリモード
# 追記モードでreadも可能な状態
f = open( "test.txt", "a+" )
try:
# 書き込み可能
f.write( "test" )
# 読込んだものを即読込み可能
print( f.read() )
#=> test
finally:
f.close()
# テキストモードで読んだ場合は、strクラスで取得出来る
f = open( "test.bmp", "rt" )
print( f.read().__class__ )
#=> <class 'str'>
f.close
# バイナリモードで読んだ場合は、bytesクラスで取得出来る
f = open( "test.bmp", "rb" )
print( f.read().__class__ )
#=> <class 'bytes'>
f.close
# バイナリモードで画像を読んで、別ファイルに書き込んでみる
f = open( "test.bmp", "rb" )
f2 = None
try:
f2 = open( "test2.bmp", "wb" )
f2.write( f.read() )
finally:
f.close
if f2:
f2.close
# テキストモードの内容をバイナリモードに移そうとすると、エラー
f = open( "test.bmp", "r" )
f2 = open( "test2.bmp", "wb" )
f2.write( f.read() )
#=> TypeError: must be bytes or buffer, not str

