48

我有一个非常简单的 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()

当我尝试运行它时,我得到:

Traceback(最近一次调用最后一次):
文件“chval.py”,第 9 行,在?f = open(sys.argv[1], 'r') TypeError: an integer is required

我正在使用 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充分的理由(而且没有很多)。

您的代码正在使用 os.open() 函数而不是内置的 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 回答
5

提供这些参数解决了我的问题:

with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
    file.write(result)
于 2017-11-06T05:44:14.193 回答
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
于 2015-12-18T10:34:04.320 回答
0

那是因为你应该这样做:

open(sys.argv[2], "w", encoding="utf-8")

或者

open(sys.argv[2], "w")
于 2021-09-11T06:30:46.673 回答
0

你有from os import *我也有同样的错误,删除该行并将其更改为import osos lib 函数及其后面,添加 os.[function]

于 2021-10-13T13:22:23.190 回答