python - 在Python中一次读取一行文件

标签 python file-io

我确实很感激这个问题已经被问了数百万次,但我无法弄清楚,在尝试逐行读取 .txt 文件时,我一次性读取了整个文件。

这是我的小片段

    num = 0

with open(inStream, "r") as f:
    for line in f:
        num += 1
        print line + " ..."
        print num

查看 open 函数,有任何建议使用第二个参数来限制读取,因为这只是写入文件的“模式”。

所以我只能猜测我的文件也有同样的问题,但这是一个txt文件,逐行输入。

有什么提示吗?

最佳答案

如果没有更多信息,很难绝对确定......但最有可能的是,您的问题是行结尾不合适。


例如,在现代 Mac OS X 系统上,文本文件中的行以 '\n' 换行符结尾。因此,当您执行 for line in f: 时,Python 将在 '\n' 字符上中断文本文件。

但在经典 Mac OS 9 上,文本文件中的行以 '\r' 结尾。如果你有一些古老的经典 Mac 文本文件,并且你将其中一个交给 Python,它会查找 '\n' 字符,但找不到任何字符,因此它会认为整个文件是一条巨大的线。

(当然,在现实生活中,Windows 比经典的 Mac OS 更容易出现问题,但我使用这个示例是因为它更简单。)


Python 2:幸运的是,Python 有一个名为 "universal newlines" 的功能。 。有关完整详细信息,请参阅链接,但简短的版本是,在打开文本文件时将 "U" 添加到模式末尾意味着 Python 将读取三个标准行结束约定中的任何一个(并将它们作为 Unix 风格的 '\n') 提供给您的代码。

换句话说,只需更改一行:

with open(inStream, "rU") as f:

Python 3:通用换行符是标准行为的一部分;添加 "U" 没有任何效果,已被弃用。

关于python - 在Python中一次读取一行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283539/

相关文章:

python - Tensorflow 动态循环神经网络 (LSTM) : how to format input?

python - 导入内部函数是pythonic吗?

ruby - Java .properties 文件等效于 Ruby?

c - 从键盘获取输入并插入二进制文件

java - 使用 Hadoop 0.20+ 生成多个输出文件

java - 我们如何知道一条记录是否已被读取?我们如何跟踪记录指针?

python - 如何在保留所有行的同时连接行并使每组有一个结果值

python - 如何从同一个类的页面中的两个表中提取数据?

c - 为什么在更新模式下读取和写入之间总是需要 fseek 或 fflush?

python - Python 中的 cv::Rect 功能?