2

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

这是我的小片段

    num = 0

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

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

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

有什么提示吗?

4

1 回答 1

3

没有更多信息,很难绝对确定……但很可能,您的问题是不适当的行尾。


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

但是在经典的 Mac OS 9 上,文本文件中的行改为以结尾'\r'。如果你有一些古老的经典 Mac 文本文件,你给 Python 一个,它会去寻找'\n'字符却找不到,所以它会认为整个文件是一大行。

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


Python 2:幸运的是,Python 有一个叫做“通用换行符”的特性。有关完整的详细信息,请参阅链接,但简短的版本是"U"在打开文本文件时添加到模式的末尾意味着 Python 将读取三个标准行尾约定中的任何一个(并将它们作为 Unix 样式提供给您的代码'\n')。

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

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

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

于 2013-08-16T23:56:27.123 回答