ファイル操作

概要
ファイル出力
# ファイル出力
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
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 : バイナリモード
# 追記モードで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
戻る    ご意見、ご要望