【python】組み込み関数open()でTypeError: an integer is required

open()でファイルを読み込もうとしたら
こんなエラーがでた。

file = "zzz_test.txt"
with open(file, "r", "utf-8") as f_r:
  print f_r.readline()
Traceback (most recent call last):
  File "zzz_opentest.py", line 3, in <module>
    with open(file, "r", "utf-8") as f_r:
TypeError: an integer is required

バージョンは2.7を使っている。

Python 2.7.14

結論から言えば、3コ目の引数には文字コードではなく
ファイル読み込みのバッファ数を指定すべきなので、
(もしくは指定しない。)
「integerが必要だよ!」っとメッセージがでるようです。

open(file, "r", "utf-8")  ---> xダメ
open(file, "r")  ---> OK

2. 組み込み関数 — Python 2.7.14 ドキュメント




似たようなことで困った人いたみたい。
stackoverflow.com



どこで間違えたかなーと思い返すと
特殊なファイルをオープンするときに使う
gzipやcodecと間違えてた。

gzip.open(file, "r", "utf-8")
codecs.open(file, "r", "utf-8")

でencodingをつけてもエラーになる。

Traceback (most recent call last):
  File "zzz_opentest.py", line 4, in <module>
    with open(file, "r", encoding="utf-8") as f_r:
TypeError: 'encoding' is an invalid keyword argument for this function

調べてみたら、encodingはpython3からみたいですね。

qiita.com



まとめ

  • python2でopen()は文字コードつけない。つけるんならcodec.open()、io.open()は文字コードつけられる。
  • python3だとopen()に文字コードつけられる。



Pythonスタートブック [増補改訂版]

Pythonスタートブック [増補改訂版]