为什么os.linesep只能处理Python中的某些字符串?

时间:2018-05-18 07:39:06

标签: python line-breaks

我想将网页内容作为字符串阅读并删除所有换行符。为了使我的脚本平台独立,我认为寻找os.linesep而不是' \ n'是一个好主意。或" \ n \ r"。要使用其他字符补充不需要的字符,我使用string.replace。它不适用于网页,因此我使用了txt文件进行测试。该文件的内容很简单:

这是第一行 这是第二行 linsep为什么不起作用?
我不明白!

如此扼杀,当我在文件中读取二进制流并对其进行解码时,它确实找到了所有的换行符。当我作为文本阅读时,它没有。我检查了两个,假设的字符串和从二进制流转换的假定字符串,如果它们真的是字符串,两者看起来都是,根据type()。 这真让我烦恼,有人可以帮我解释一下我在这里的误解吗?

这是我的测试代码:

file = open(r"C:\Users\path\LinebreakTest.txt", "r")
data = file.read().replace(os.linesep, "REPLACEMENT")
print(type(data))
print(data)

file = open(r"C:\Users\path\LinebreakTest.txt", "rb")
dataBin = file.read().decode("utf-8").replace("\n", "REPLACEMENT")
print(type(dataBin))
print(dataBin)

这是我的输出:

class' str'
这是第一行 这是第二行 linsep为什么不起作用?
我不明白!

class' str'
这是第一行 更换这是第二行 更换为什么linsep不起作用?
REPLACEMENTI没有得到它!
REPLACEMENT

提前致谢!

1 个答案:

答案 0 :(得分:0)

问题在于使用os.linesep,您假设您正在处理的文件是在脚本运行的同一平台上创建的,可能不是这种情况 - 特别是对于创建的网站在各种开发环境中。

HTTP服务器不会将换行符转换为客户端平台,而是按原样流式传输数据,希望客户端本身是平台无关的(大多数现代浏览器都是这种情况。

幸运的是,没有那么多行分隔符可供使用。 According to its sources,Python自己的linesep实际上只能是两个可能值中的一个:\n\r\n

因此,我建议简化一下。首先将'\r\n'的任何实例替换为'\n',然后将其拆分为'\n'

data = file.read().replace('\r\n', '\n').replace('\n', "REPLACEMENT")
相关问题