Python文件变量-这是什么?

发布于 2021-01-29 16:41:26

我刚开始使用Python,并且由于我的背景是使用更底层的语言(java,C ++),所以我真的无法获得一些东西。

因此,在python中,您可以创建一个文件变量,例如,通过打开一个文本文件,然后像下面这样遍历其行:

f = open(sys.argv[1])
for line in f:
    #do something

但是,如果我尝试f[0]解释器给出错误。那么f,如果我可以将for ... in ... :循环应用于对象,则对象具有什么结构?我一般如何知道?

关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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),它将把当前位置设置回文件的开头。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看