Python 文件变量 - 它是什么?

2023-11-26

我刚刚开始使用 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(使用前将#替换为@)

Python 文件变量 - 它是什么? 的相关文章

随机推荐

  • ipython %timeit“赋值前引用的局部变量‘a’”

    我正在尝试运行以下代码 但我得到了local variable a referenced before assignment a x for x in range 10 b x for x in range 10 timeit a b 该语
  • 如何重新启动 git 仓库?

    我从我的一个旧项目中获取了一个存储库 并编辑了这些文件 以便我可以将其用作新项目的 骨架 说我在这里 骨架 框架 我已经在那里编辑了存储库 我将如何使用该目录中的这些文件重新启动此存储库 什么should我已经做好了 我所做的就是拉取存储库
  • jQuery 单击处理函数不会在 DOM 加载后添加的元素上触发

    我相信我可以使用 live 来做到这一点 但该方法已被弃用 问题是这样的 我有一个点击处理函数 它应该在任何具有 myClickEl 类的元素上触发 这对于加载时文档中存在的 myClickEl 元素效果很好 但是 如果我在 DOM 加载后
  • Spring配置C3P0与Hibernate?

    我有一个 Spring JPA 应用程序 其中 Hibernate 作为 JPA 提供者 我通过以下方式在 Spring 中配置了 C3P0 数据源
  • ASP .NET Core webapi在中间件中设置cookie

    我试图在执行操作后设置一个 cookie 努力使其工作 如果我从控制器而不是中间件设置它 我就能看到cookie 我已经按照配置顺序进行了操作 但什么也没有 代码示例来自一个干净的 webapi 创建的项目 所以如果有人想玩它很简单 只需创
  • Python-从文本文件中查找行号[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在编写在文本文件中查找的代码 并查看输入是否在其中 E g 我输入 披萨 我的文本文件包含 bread pizza pasta tomato 有没有办法打印披萨一词所在的行号
  • 基于 os 系列的 Maven 条件

    我正在尝试执行以下操作
  • 压缩和未压缩的 .wav 文件

    压缩和未压缩的 wav 文件有什么区别 The WAV格式是 Windows 中音频文件的容器格式 WAV 文件由标题和内容组成 标头包含有关 WAV 文件中包含的音频的大小 持续时间 采样频率 分辨率以及其他信息 通常 标头之后是实际的音
  • 使用 print.xtable 更改表格的字体大小

    我想使用 print xtable 更改表格的字体大小 Using print xT size tiny 有效 但我不知道其他尺寸选项 像 size 7pt 这样的东西会很好 您可以使用以下命令选择特定的字体大小 fontsize
  • 捕获更通用的异常类型是否有好处?

    如果我们要捕捉特定形式的IOException 或任何其他类型的 事实上 我们只尝试捕获几个 并为它们定义明确的输出 说 FileNotFoundException ZipException 我们是否应该始终把它拖下来并用一个覆盖所有基地
  • Windows Phone 开发和单元测试

    我希望启动一个针对 Windows Phone 的项目 但由于缺乏单元测试支持 我有点推迟了 1 我习惯于使用 NUnit XUnit 来满足我的大部分测试需求 并使用 NSubstitute 之类的东西来进行模拟 据我所知 您不能将这些框
  • 不抛出异常时的性能(C++)[重复]

    这个问题在这里已经有答案了 我已经阅读了很多有关 C 异常的内容 并且我所看到的 特别是异常性能是一个很难的话题 我什至试图深入了解 g 的底层 看看异常是如何在汇编中表示的 我是一名 C 程序员 因为我更喜欢低级语言 不久前 我决定使用
  • django-compressor 是否支持模板继承?

    我在用着Django 压缩器压缩我网站的静态 CSS 和 Javascript 文件 由于我通过 Amazon S3 提供网站的静态资产 因此我还使用Django 存储将我的文件上传到 S3 这是我的问题 我正在努力清理base html我
  • 强制 attr=title 弹出 on 元素

    有没有办法 我可以强制元素在元素悬停时显示 标题 弹出窗口 或者如果没有 有没有办法 我可以配置显示标题弹出窗口之前的超时时间 默认情况下 标题在悬停时显示 您无法更改其行为
  • Javascript 或 Flash 导出至 CSV/Excel

    是否有办法将 JSON 数据导出到 CSV Excel 而无需与服务器端进行任何交互 仅使用 JavaScript 还是闪存 我目前正在使用 ZeroClipboard 将值复制到剪贴板 但我想从浏览器 FF Chrome IE 等 直接将
  • net/http.rb:560:in `initialize': getaddrinfo: 名称或服务未知(SocketError)

    timestamp nil def generate oauth url timestamp timestamp url CONNECT URL REQUEST TOKEN PATH oauth callback OAUTH CALLBAC
  • 带有 v-for 的动态 v 模型

    我有一个 v for 循环 它将吐出多行输入 我想将每个单独的行动态保存到数组对象中 v for table class table m 0 tbody tr td fund name td tr tbody table
  • 来自电子邮件地址的域的正则表达式

    任何人都可以帮助我使用正则表达式来返回电子邮件地址的末尾部分 符号之后 吗 我是正则表达式的新手 但想学习如何使用它 而不是编写低效的 Net 字符串函数 例如 对于输入 电子邮件受保护 我需要 example com 的输出 干杯 蒂姆
  • $q.reject 和处理 AngularJS 链式承诺中的错误

    我无法理解使用链接承诺进行错误处理的基本概念 为了学习规则 我写了一个简单的例子 猜测结果会是什么 但不幸的是 它的行为并不像我想象的那样 我已经阅读了多篇有关该主题的文章 但由于我的英语水平不佳 我可能无法获得详细信息 无论如何 这是我的
  • Python 文件变量 - 它是什么?

    我刚刚开始使用 Python 由于我的背景是低级语言 java C 所以我无法真正理解一些东西 因此 在 python 中 我们可以通过打开一个文本文件来创建一个文件变量 然后像这样迭代它的行 f open sys argv 1 for l