【发布时间】:2014-08-31 23:53:12
【问题描述】:
在 Windows 中,如果我使用 Python 的“for line in file”语法来读取普通文本文件的内容,则最后一行不会以换行符结尾,但它之前的所有行都会。在 Linux 中,这种行为似乎有所不同——当我逐行读取文件并打印其内容时,我总是发现最后一行以换行符结尾,即使真实文件中不存在换行符!我也尝试过使用 file.readline() 函数,结果相同。
(我假设文本文件实际上并没有以换行符结尾。如果是这样,Linux 会从文件末尾打印两个换行符,而不仅仅是真正存在的那个。)
我的代码很简单。问题是它在 Linux 中产生的结果与在 Windows 中不同。
with open(path, 'r') as file:
for line in file:
print('>', line, '<', sep='')
'''
# Alternate method:
while True:
line = file.readline()
if not line:
break
print('>', line, '<', sep='')
'''
在 Linux(确切地说是 Ubuntu 13.10)上,最后一行总是以幻像换行符结尾。我在 Python 2 和 3 中都试过了。知道这里发生了什么吗?
【问题讨论】:
-
我无法在 Linux 上使用 Python 2.7.8 或 Python 3.4.1 重现此行为,文件的最后一行没有以换行符结尾。你确定吗?最后一行是否以 \r 结尾,也许?