48

テキストファイルをスキャンする必要がある非常に単純な python スクリプトがあります。このファイルには、 id =' value 'としてフォーマットされた行が含まれており、それらを dict に入れます。Python モジュールは chval.py と呼ばれ、入力ファイルは in.txt です。コードは次のとおりです。

import os,sys
from os import *
from sys import *

vals = {}

f = open(sys.argv[1], 'r')

for line in val_f:
    t = line.split('=')
    t[1].strip('\'')
    vals.append(t[0], t[1])

print vals

f.close()

実行しようとすると、次のようになります。

トレースバック (最新の呼び出しが最後):
ファイル "chval.py"、9 行目、? f = open(sys.argv[1], 'r') TypeError: 整数が必要です

私は python 2.4 を使用しています...新しいものを使用しないように挑戦されたので、私が知らない open() について何かありますか? なぜ整数が必要なのですか?

その行以降はテストされていません。要するに、なぜエラーが発生するのですか?どうすれば修正できますか?

4

7 に答える 7

81

あなたがしたのでfrom os import *、あなたは(偶然に)os.openを使用しています。これには、テキストの「r」または「w」の代わりに整数フラグが必要です。その行を取り出すと、そのエラーを乗り越えることができます。

于 2009-06-25T23:16:56.900 に答える
13

正当な理由なしにやらないでくださいimport * from wherever(そして多くはありません)。

コードは、組み込みのopen()関数ではなくos.open()関数を取得しています。本当にos.open()を使用したい場合はimport os、を呼び出してos.open(....)ください。どちらのオープンを呼び出したい場合でも、必要な引数についてのドキュメントを読んでください。

于 2009-06-25T23:31:22.783 に答える
12

また、Python 2.6 以降では、組み込み関数 open() が io.open() 関数のエイリアスになっていることにも注意してください。Python 3 の組み込みの open() を削除し、io.open の使用を要求することも検討されました。これは、「from blah import *」などによる偶発的な名前空間の衝突を回避するためです。Python 2.6+ では、次のように書くことができます (また、このスタイルを良い習慣と見なすこともできます):

import io
filehandle = io.open(sys.argv[1], 'r')
于 2009-06-26T00:10:37.277 に答える