我刚刚开始使用 Python,由于我的背景是低级语言(java、C++),所以我无法真正理解一些东西。
因此,在 python 中,我们可以通过打开一个文本文件来创建一个文件变量,然后像这样迭代它的行:
f = open(sys.argv[1])
for line in f:
#do something
但是,如果我尝试f[0]
解释器给出错误。那么结构是做什么的f
对象有,我一般如何知道,如果我可以申请for ... in ... :
循环到一个对象?
f
is a 文件对象。该文档列出了其结构,因此我仅解释索引/迭代行为。
仅当对象实现时才可索引__getitem__
,您可以通过调用来检查hasattr(f, '__getitem__')
或者只是打电话f[0]
并查看它是否抛出错误。事实上,这正是您的错误消息告诉您的内容:
TypeError: 'file' object has no attribute '__getitem__'
文件对象不可索引。您可以致电f.readlines()
并返回一个行列表,该列表本身是可索引的。
实现的对象__iter__
是可迭代的for ... in ...
句法。现在实际上有两种类型的可迭代对象:容器对象和迭代器对象。迭代器对象实现两个方法:__iter__
and __next__
。容器对象仅实现__iter__
并返回一个迭代器对象,这实际上是您要迭代的对象。文件对象是它们自己的迭代器,因为它们实现了这两种方法。
如果你想获取可迭代对象中的下一个项目,你可以使用next()
功能:
first_line = next(f)
second_line = next(f)
next_line_that_starts_with_0 = next(line for line in f if line.startswith('0'))
需要注意的是:可迭代对象通常不是“可回滚的”,因此一旦您浏览了可迭代对象,就无法真正返回。要“倒回”文件对象,您可以使用f.seek(0)
,这会将当前位置设置回文件的开头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)