任何人都可以帮助我使用此代码吗?
Jobs = ()
openFile = open('Jobs.txt')
x = 1
while x != 0:
Stuff = openFile.readline(x)
if Stuff != '':
Jobs.append(Stuff)
else:
x = 0
Run Code Online (Sandbox Code Playgroud)
此代码抛出:
AttributeError: 'tuple' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)
我正在使用 Python 3.6。
在行中:
Jobs = ()
Run Code Online (Sandbox Code Playgroud)
你创建一个tuple. Atuple是不可变的,并且没有添加、删除或更改元素的方法。您可能想要创建一个list(列表有一个.append-method)。要创建列表,请使用方括号而不是圆括号:
Jobs = []
Run Code Online (Sandbox Code Playgroud)
或使用list-"构造函数":
Jobs = list()
Run Code Online (Sandbox Code Playgroud)
但是,对您的代码的一些建议:
opening 一个文件需要你close再次。否则,只要 Python 正在运行,它就会保留文件句柄。为了更容易,有一个上下文管理器:
with open('Jobs.txt') as openFile:
x = 1
while x != 0:
Stuff = openFile.readline(x)
if Stuff != '':
Jobs.append(Stuff)
else:
x = 0
Run Code Online (Sandbox Code Playgroud)
一旦上下文管理器完成,即使发生异常,文件也会自动关闭。
它很少使用,但iter接受两个参数。如果你给它两个参数,那么它会在每次迭代中调用第一个参数,并在遇到第二个参数时立即停止。这似乎非常适合这里:
with open('Jobs.txt') as openFile:
for Stuff in iter(openFile.readline, ''):
Jobs.append(Stuff)
Run Code Online (Sandbox Code Playgroud)
我不确定这是否真的像预期的那样工作,因为openFile.readline不断尾随换行符 ( \n) 所以如果你想停在你需要的第一个空行for Stuff in iter(openFile.readline, '\n')。(也可能是我电脑上的一个 windows 东西,如果你没有问题,请忽略这个!)
这也可以在两行中完成,而无需Jobs在开始循环之前创建:
with open('Jobs.txt') as openFile:
# you could also use "tuple" instead of "list" here.
Jobs = list(iter(openFile.readline, ''))
Run Code Online (Sandbox Code Playgroud)
除了iter两个参数外,您还可以使用itertools.takewhile:
import itertools
with open('Jobs.txt') as openFile:
Jobs = list(itertools.takewhile(lambda x: x != '', openFile))
Run Code Online (Sandbox Code Playgroud)
这lambda有点慢,如果你需要更快,你也可以使用''.__ne__or bool(后者有效,因为被认为是空字符串False):
import itertools
with open('Jobs.txt') as openFile:
Jobs = list(itertools.takewhile(''.__ne__, openFile))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26032 次 |
| 最近记录: |