ファイル操作
ファイル出力
# ファイル出力 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