我有一个非常简单的python脚本应该扫描一个文本文件,其中包含格式为 id =' value '的行并放入他们变成了一个字典。 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()?为什么要整数?
该行未经测试后的任何内容。简而言之:为什么它会给我错误,我该如何解决?
答案 0 :(得分:59)
因为你做了from os import *
,你(偶然)使用os.open,它确实需要整数标志而不是文本“r”或“w”。取出那条线,你就会越过那个错误。
答案 1 :(得分:11)
没有充分理由不要import * from wherever
(并且没有多少)。
您的代码正在使用os.open()函数而不是内置的open()函数。如果您确实想使用os.open(),请执行import os
,然后调用os.open(....)
。无论打开哪个打开,请阅读有关所需参数的文档。
答案 2 :(得分:11)
另外值得注意的是,从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')
答案 3 :(得分:1)
提供这些参数解决了我的问题:
with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
file.write(result)
答案 4 :(得分:0)
从http://www.tutorialspoint.com/python/os_open.htm开始,您还可以保留导入和使用
file = os.open(" foo.txt",mode)
,模式可以是:
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