2009-06-25 78 views
28

我有一個非常簡單的Python腳本,應該掃描文本文件,其中包含格式化爲ID =「」行並把它們放到一個字典。 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是一個字典,它沒有追加方法。你想只分配vals [t [0]] = t [1] – Christopher 2009-06-25 23:19:50

回答

52

因爲你做了​​,你是(意外地)使用os.open,它確實需要一個整數標誌而不是文本「r」或「w」。拿出那條線,你會過去那個錯誤。

9

不要做import * from wherever沒有一個很好的理由(並沒有太多)。

您的代碼正在拾取os.open()函數,而不是內置的open()函數。如果您真的想使用os.open(),請執行import os然後致電os.open(....)。無論您想打開哪個電話,請閱讀有關它需要什麼參數的文檔。

9

另外需要注意的是,從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') 
0

http://www.tutorialspoint.com/python/os_open.htm你也可以讓你的進口和使用

文件= os.open(「富。 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)