f是文件对象。该文档列出了其结构,因此,我仅说明索引/迭代行为。
对象只有在实现时才可索引
__getitem__,可以通过调用
hasattr(f,'__getitem__')或仅调用
f[0]并查看它是否引发错误来检查该对象。实际上,这正是您的错误消息告诉您的内容:
TypeError: 'file' object has no attribute '__getitem__'
文件对象不可索引。您可以调用
f.readlines()并返回行列表,该列表本身是可索引的。
实现的对象可以
__iter__使用
for ... in...语法进行迭代。现在,实际上有两种可迭代对象:容器对象和迭代器对象。迭代器对象实现两种方法:
__iter__和
__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),它将把当前位置设置回文件的开头。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)