是换行符” " 2 个字符或 1 个字符

问题描述 投票:0回答:3

所以我有一个文件.txt:

>>012345
>> (new line)

当我打电话时:

b=a.read(7)
print b

这会给我

 012345
 (with a newline here)

所以我看到它已经读取了接下来的 7 个字符,算上“ ”作为单个字符。 但是当我使用seek时,它似乎会处理“ “ 作为两个字符:

position = a.seek(-2,2)
b=a.read(1)
print b

这将打印一个新的空行而不是 5 个。

这2种方法对待“

\n
”有不同吗?

python io
3个回答
12
投票

Python 默认以 文本模式 打开文件。以文本模式打开的文件会自动将平台本机换行符转换为

\n

您很可能在 Windows 上使用

\r\n
换行符约定打开了一个文件。

如果您不希望进行此转换,请以二进制模式打开文件。有关更多详细信息,请参阅

open()
函数的文档:

默认是使用文本模式,这可能会在写入时将

'\n'
字符转换为特定于平台的表示形式,并在读取时将其转换回来。因此,在打开二进制文件时,应在模式值后附加
'b'
来以二进制模式打开文件,这将提高可移植性。


1
投票

您不必自己处理这个问题。 Python 附带电池。 :-)

如果换行符困扰您,只需

read()
整个文件并使用
splitlines()
字符串方法;

In [21]: test = 'foo \nbar bla\n baz\r\n'

In [22]: test.splitlines()
Out[22]: ['foo ', 'bar bla', ' baz']

请注意,这只会删除行尾的空格。


0
投票

在以下示例中,python 将其视为单个字符:

这是 UTF-8 文件中的示例字符串:

["1:b'MQ==':b'MQ==':b'MQ=='\n", "2:b'dGVzdG9zdGVyb25p':b'dXNlcg==':b'cGFzc3dvcmQ='\n"]

如果检查最后一行是否以换行符结尾,可以使用以下代码:

    with open(filename, "r") as file:
        lines = file.readlines()
        print(lines)
    if lines[-1][-1] == "\n":
        print("Found new line character")
    else:
        print("No new line character found")

>>> Found new line character

Python 在列表中最后一项的最后一个索引处找到一个换行符。

© www.soinside.com 2019 - 2024. All rights reserved.