2009-06-25 12 views
28

私はID =「」としてフォーマットされた行を含むテキストファイルを、スキャンし、辞書にそれらを置く必要があることを非常に簡単なPythonスクリプトを持っています。 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() 

私はそれを実行しようとすると、私が取得:

Traceback (most recent call last):
File "chval.py", line 9, in ? f = open(sys.argv[1], 'r') TypeError: an integer is required

私のpython 2.4を使用しています...私は新しいものを使用しないために挑戦してきたので、そこにあります私が知らないopen()についての何か?なぜそれは整数が欲しいのですか?

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

+1

スクリプトにはバグがあります。 valsは辞書で、appendメソッドはありません。あなたはval [t [0]] = t [1] – Christopher

+0

でも代入したいのですが、val_fとは対照的に "for line in f:"とされています – Sev

+0

yeah sev、私は途中で変数を途中まで変更しました...それを指摘してくれてありがとう。 – Victor

答えて

52

​​を行ったので、実際にはos.openを使用しています。実際には、テキストの「r」または「w」の代わりに整数フラグが必要です。その線を抜けて、あなたはそのエラーを乗り越えるでしょう。

9

import * from whereverには理由がなく(多くはありません)しないでください。

コードでは、組み込みのopen()関数の代わりにos.open()関数を使用しています。 os.open()を実際に使用する場合は、import osを呼び出し、os.open(....)を呼び出します。どちらを開いていても、必要な引数についてのドキュメントを読んでください。

9

また、Python 2.6以降では、組み込み関数open()がio.open()関数のエイリアスになりました。 "from blah import *"のようなものから生じる偶然の名前空間の衝突を避けるために、Python 3の組み込みopen()を削除し、io.openの使用を必要とすることさえ考えられました。 Pythonでは2.6+あなたが書くことができます(また、このスタイルは良い習慣であると考えることができます):

import io 
filehandle = io.open(sys.argv[1], 'r') 
0

http://www.tutorialspoint.com/python/os_open.htmから、あなたも、あなたの輸入を維持し、

ファイル= os.open(「FOOを使用することができます。 TXT」、モード)

、モードが次のようになります。

os.O_RDONLY: open for reading only 
os.O_WRONLY: open for writing only 
os.O_RDWR : open for reading and writing 
os.O_NONBLOCK: do not block on open 
os.O_APPEND: append on each write 
os.O_CREAT: create file if it does not exist 
os.O_TRUNC: truncate size to 0 
os.O_EXCL: error if create and file exists 
os.O_SHLOCK: atomically obtain a shared lock 
os.O_EXLOCK: atomically obtain an exclusive lock 
os.O_DIRECT: eliminate or reduce cache effects 
os.O_FSYNC : synchronous writes 
os.O_NOFOLLOW: do not follow symlinks 
1

これらのパラメータは私の問題を解決し提供することにより:

with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file: 
file.write(result) 
関連する問題