【发布时间】:2019-09-18 11:26:25
【问题描述】:
我正在解析一个包含如下键值对的文件:
with open(filename) as f:
data = f.read()
key_value_pairs = data.split(";\n")
然后有一天,交付的文件有一个不同的行终止符,有人将处理它的那一行更改为:
key_value_pairs = data.split(";^M\n")
找到了答案here,它解释了^M 是MS-DOS 现象。
然后this answer 声称 Windows 终结符是 \r\n,没有提到 ^M\n
作为背景信息,将提到该列表中的每个元素 key_value_pairs 在另一个循环中进一步拆分为 .split("=", 1)
我希望将来的文件在有或没有^M 的情况下会出现不可预测的行终止,并试图找到一种方法来处理它,而无需使用混乱的正则表达式或字符串方法(如果可以避免的话)。
也许最好的办法是在开始时从文件中删除每个^M,然后将它们全部视为 Unix 文件。但是,对于文件中的某些 base64 二进制块,这可能有点危险。
在打开文件时,Python 中有什么东西可以干净地处理那些^M 吗?
【问题讨论】:
-
这里的“交易”是什么意思?删除它们?将它们转换成别的东西?
-
如果你的
open调用真的像这样,Python 应该会自动为你将\r\n转换为\n。请参阅open函数的newline参数:docs.python.org/3.5/library/functions.html#open -
用换行符分割文件,不管有没有
^M -
在文件中还没有看到
\r,它看起来不像^M
标签: python python-3.x newline separator