在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.你知道这里发生了什么吗?
答案 0 :(得分:2)
删除换行怎么样?这是你想要的吗?
with open('/Users/sebastian/Desktop/Untitled.txt', 'r') as file:
for line in file:
line = line.strip()
if line:
print('>', line, '<', sep='')
打印
>This is the first line<
>this is the second line<
>this is the third line<
PS:如果文本文件中间某处有空行,您的备用方法会出现问题。
看看PEP278。 “U”模式在您的情况下可能会有所帮助
with open('/Users/sebastian/Desktop/Untitled.txt', 'rU') as file:
for line in file:
line = line.strip()
print('>', line, '<', sep='')
打印
>This is the first line<
>this is the second line<
><
>this is the fourth line (blank line above)<
><
或者,您可以添加一个特定于平台的额外行,例如,通过
导入平台
if platform.system()=='Windows':
# do sth
else:
# do sth
答案 1 :(得分:2)
Linux中的每个文本文件都包含一系列行和一个终止的换行符。如果文件不以linux中的新行字符结尾,则不会将其视为文本文件。 这在linux使用的POSIX file system中定义。
3.206 Line
A sequence of zero or more non- <newline> characters plus a terminating <newline> character.
所以这不是您的代码的问题。它只是linux下的文件系统。 您只需删除从文件中读取的字符串中的终止换行符即可。