for line in File 是否读取整个文件

2023-12-03

以下代码是为每个循环读取一行,还是在开始迭代之前先将整个文件读入内存?

for line in f:
    print(line)

我的目的是从文件中读取一行。


你无法确定。你所能知道的就是它会return一次一行。这Python 标准库文档 says : 为了使 for 循环成为循环文件行的最有效方式(一种非常常见的操作),next() 方法使用隐藏的预读缓冲区。由于使用预读缓冲区,将 next() 与其他文件方法(如 readline())结合起来无法正常工作.

我的理解是,预读缓冲区加载一个完整的块(未确定的大小)并在该缓冲区中查找行尾。但对于一个小文件(几个ko),您可以确定只会有一次物理读取。我曾经尝试过放一个read得到第一行后next在一个小文件(大约 50 行)上,在文件末尾找到文件指针。

当然,对于一个非常大的文件,它将被读取身体上的一次一个块,Python 内存一次会使用一行。所以它会比readlines()。但毕竟在common系统(类 Unix、Mac OS 或 Windows)上的底层读取系统调用file(*) 没有行尾的概念,只能读取(最大)字节数。所以这些系统没有办法身体上的读到行尾,无论你使用什么语言。您只能使用加载内部缓冲区然后在该缓冲区中查找行尾的实用程序。就是这样next()方法适用于 Python 中的文件对象。

在您发表评论后,我了解到您尝试只获取第一行。你可以这样做:

line = f.next()

但不要尝试使用任何read之后的方法,因为正如我上面所解释的,文件指针可能远远超出第一行的末尾。

(*) 从控制台或终端设备读取时会不一样......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

for line in File 是否读取整个文件 的相关文章

随机推荐

  • 无法触发 git 子模块上的提交后 git hook

    我们使用带有多个子模块的 git 模块 为了让日常使用更方便 我想要一个 post commit 钩子 它会自动将子模块添加到 main super root git repo clone module 中的 git 索引中 例如git a
  • 空基类是否应该影响派生类的布局?

    C 标准 引用草案 n3242 对子对象 intro object 有如下规定 除非对象是位域或零的基类子对象 size 该对象的地址是它的第一个字节的地址 占据 两个不同的对象 既不是位域也不是基数 零大小的类子对象应具有不同的地址 现在
  • 在 RANK 函数中跳过平局位置

    我想跳过领带位置 CREATE TABLE Persons Name varchar 50 totalrate int nrrates int INSERT INTO Persons Name totalrate nrrates VALUE
  • 如何在git log中显示不同的语言字符?

    这是我现在在 git 日志中看到的内容 commit d0ed97d243eaf905b03244a4d1ba6af26213e4ad Author some guy lt email protected gt Date Mon Jun 3
  • 如何在 WCF 服务方法调用之间保留值?

    我有这个 WCF 服务类 public partial class OhmioSVC IOhmioSVC Security Porque no funciona si la variable no es estatica private s
  • nokogiri 可以在保存 xml 时对属性使用单引号吗?

    Nokogiri 使用双引号保存 XML 属性 即使它读取的 DOM 有单引号 这当然是完全合法的 但即使 DOM 没有改变 它也会对文件内容带来烦人的变化 使得 diff 和 git 等工具更难弄清楚发生了什么 我可以强制它使用单引号 或
  • 更改 Bootstrap 弹出窗口的宽度

    我正在使用 Bootstrap 3 设计一个页面 我正在尝试使用弹出窗口placement right在输入元素上 新的 Bootstrap 确保如果您使用form control您基本上有一个全角输入元素 HTML 代码看起来像这样 di
  • 如何挂钩页面范围内的点击事件?

    正如问题所述 我想在每次用户单击网页时触发一个调用方法的事件 在不使用 jQuery 的情况下如何做到这一点 如果不使用 jQuery 我想你可以这样做 if document addEventListener document addEv
  • Python 矩阵邻居检查

    我有一个包含 0 和 1 的 7 7 矩阵 其中每个 x y 将检查其邻居中有多少个是 1 我是 python 的初学者 只会使用基本的编程过程 I have for x in range rows for y in range cols
  • 如何从一个页面获取输入并将其发送到 django 中的另一个页面

    我对此还很陌生 我正在尝试根据用户要求在 iframe 中构建一个报告页面 用户可以使用 src 宽度和高度创建报告 并且我成功完成了此操作 我现在能够创建报告 我想要这个创建的报告名称将显示在下拉菜单中 当用户单击报告名称时 用户可以看到
  • 在 Struts 2 中动态生成名称和值属性

    我正在将代码从 Struts1 迁移到 Struts2 Struts1代码
  • fork之后,全局变量是否共享?

    考虑这个简单的代码 int myvar 0 int main if fork gt 0 myvar else father do nothing 当子进程增加 myvar 时 该值是否与父进程共享 如 pthread 不 又是 不 它们不会
  • WPF 图像:.Source = Clipboard.GetImage() 未显示

    这个简单的程序不起作用 图像没有出现在窗口中 namespace ClipBoardTest public partial class MainWindow Window public MainWindow InitializeCompon
  • 如何创建带有数据字段的 Java 类

    我正在上一门编程课 该课为我提供了一个项目 但我不知道从哪里开始 希望有人能把我推向正确的方向 我只发布该项目的一部分 以便有人可以向我展示一些代码 以了解它是如何完成的 因为我之前参加过编程课程 但我缺乏实践 创建一个名为 Registr
  • 如何通过javascript设置没有id的textarea的值?

    通常我们运行 javascript 代码来设置任何值 document getElementById id name value 但我有一个这样的页面 div div class class name div div
  • 是否可以在多选下拉列表中设置限制?

    我在我的网站中使用了多项选择下拉列表 这工作正常 我们可以从该列表中选择多个选项 但我只想从该列表中选择 3 个选项 是否可以为此设置限制 我正在使用来自的代码http www aleixcortadellas com main 2009
  • Git 命令显示 .gitignore 忽略了哪些特定文件

    我正在接触 Git 并遇到以下问题 我的项目源树 src refs vendor 我的供应商分支中有代码 当前为 MEF 我将在那里进行编译 然后将引用移至 src refs这就是项目从中获取它们的地方 我的问题是我有我的 gitignor
  • 如何使用jquery获取输入是否具有焦点[重复]

    这个问题在这里已经有答案了 如何使用jquery获取html的输入标签是否具有焦点 如果输入 图像等标签具有焦点 则 keydown 事件将适用于表单 但它不会工作 它的重点是形式 而不是任何标签 如输入 图像等 我该如何解决这个问题 请帮
  • 将 BCD 转换为二进制的最有效方法

    我有下面的代码将 32 位 BCD 值 以两个 uint 半部分提供 转换为 uint 二进制值 提供的值最大可达 0x9999 形成最大值 0x99999999 有没有更好 即更快 的方法来实现这一目标
  • for line in File 是否读取整个文件

    以下代码是为每个循环读取一行 还是在开始迭代之前先将整个文件读入内存 for line in f print line 我的目的是从文件中读取一行 你无法确定 你所能知道的就是它会return一次一行 这Python 标准库文档 says