Pythonのファイルオープンについて
ファイルオープン
ファイルを読み込んだり、書き込みを行う場合、最初に目的のファイルをopen関数で開きます。 正常に開いたら、readやreadlineなどの関数などでファイルを読み込んだり、書き込んだりします。 処理が完了したらclose関数で開いていたファイルを閉じます。
open
テキストファイルを読み込むだけの場合、第二引数に'r'を指定します。
f = open(tmp_file, 'r') f.close()テキストファイルの書き込みは'w'を指定します。 バイナリファイルの場合は、'b'を追加する必要があります。 バイナリファイルを更新するような書き込みでは、'wb'を指定する必要があります。
f = open(tmp_file, 'wb') # ここでバイナリファイルの書き込み処理を行う。 f.close()
with open
ファイルを開く場合、openとcloseはセットになりますが、closeを自動で行う"with open"を使う方法もあります。
with open('test.txt', 'r') for line in f: print(line) print("ここれ以降はファイルが閉じられている")上記は、with openのブロック終了時にファイルが自動的にクローズされます。ブロックはwith openよりインデントが深い必要があります。
read
ファイルの内容全部を一度に読み込む場合、readメソッドを使用します。
f = open(tmp_file, 'r') print(f.read()) #=> ファイルの内容を全て出力 f.close()
readlines
ファイルの中身全てを1行ごとにリストにする場合、readlinesメソッドを使用します。
f = open(tmp_file, 'r') print(f.readline()) #=> ['The first line\n', 'The second line\n'] f.close()
readline
ファイルを1行ごとに読み込む場合、readlineメソッドを使用します。
f = open(tmp_file, 'r') while True: line = f.readline() if not line: break print line f.close()上記は古い方法で、今は以下の方法を使用します。
f = open(tmp_file, 'r') for line in f: print(line) f.close()
文字コード
日本語などのマルチバイトのファイルを読み込む方法
coding
スクリプトの先頭で、codingを使用して文字コードの設定を行っている場合、 ファイルの文字コードが一致していると、デコード処理がなくても正しく文字コードが 処理されます。
# -*- coding: mbcs -*- txt_file = 'sjis.txt' f = open(txt_file, 'r') for line in f: print(line) f.close()これは、Windowsで、シフトJISのスクリプトから、シフトJISのテキストファイルを 開き、中身を出力する例です。
スクリプトがUTF-8の場合は、以下をスクリプトの先頭に付けます
# -*- coding: utf8 -*-
codecs
codecsモジュールを使用すると、指定した文字コードでファイルを開くことができます。
import codecs f = codecs.open('utf8.txt', 'r', 'utf8', 'ignore') print(f.read()) f.close()
シフトJISのスクリプトで、BOM付きUTF-8のファイルを作成する場合、以下のようになります。
# -*- coding: mbcs -*- import codecs f = open('tmp_utf8_bom.txt', 'w') f.write(codecs.BOM_UTF8) f.write(u'あいう'.encode('utf8', 'ignore')) f.close()UTF-8のファイルの場合、BOM付きがあり、これはファイルの先頭3バイトが 0xEF, 0xBB, 0xBF になります。 Pythonの場合、BOMは codecs.BOM_UTF8 で定義されています。
decode
decodeメソッドを使用すると、指定した文字コードに変換することができます。
f = open('utf8.txt', 'r') print( f.read().decode('utf8', 'ignore') ) f.close()