使用Python在Linux中正确读取换行符

时间:2014-08-31 23:53:13

标签: python linux newline eof

在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.你知道这里发生了什么吗?

2 个答案:

答案 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下的文件系统。 您只需删除从文件中读取的字符串中的终止换行符即可。