1. ファイルオープン
  2. 文字コード

Pythonのファイルオープンについて

ファイルオープン

  • open

  • f = open(tmp_file, 'r')
    f.close()

  • 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()