13

如何^M从 Python 脚本中的文本文件(行尾)中删除字符?

我做了以下事情,并且^M在每个换行符处都有。

file = open(filename, "w")
file.write(something)
4

7 回答 7

9

如果您正在编写文件,则应指定open(filename, "wb"). 这样,您将以二进制模式编写,Python 不会尝试为您所在的系统确定正确的换行符。

于 2010-07-07T01:35:15.093 回答
6

Python 可以以二进制模式或文本模式打开文件。文本是默认值,因此“w”模式表示以文本模式写入。在文本模式下,Python 会根据你所在的平台调整行尾。这意味着在 Windows 上,此代码:

f = open("foo.txt", "w")
f.write("Hello\n")

将生成一个包含“Hello\r\n”的文本文件。

您可以在模式下使用“b”以二进制模式打开文件:

f = open("foo.txt", "wb")
f.write("Hello\n")

生成一个包含“Hello\n”的文本文件。

于 2010-07-07T02:12:29.990 回答
4

string.replace('\r', '') 为我工作。

丑陋,但 r+ 或 r+b 也没有其他工作(对我来说,当然):(

于 2013-02-28T14:33:00.833 回答
2

dos2unix filename.py

将换行符转换为 UNIX 样式。

于 2010-07-09T10:18:40.200 回答
1

为了便携性,您可以尝试以下方法

import os
file = open(filename, "w")
file.write(something.replace('\r\n', os.linesep))
于 2015-07-05T02:58:39.443 回答
0

json.dump 时如何显式设置回车?包含解决方案:open函数有一个额外的参数newline

file = open(filename, "w", newline="\n")
file.write(something)

换行控制通用换行模式的工作方式(它仅适用于文本模式)。它可以是 None、''、'\n'、'\r' 和 '\r\n'。它的工作原理如下:

  • 从流中读取输入时,如果换行符为无,则启用通用换行符模式。输入中的行可以以 '\n'、'\r' 或 '\r\n' 结尾,这些行在返回给调用者之前会被翻译成 '\n'。如果是 '',则启用通用换行模式,但行尾返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结束符未翻译地返回给调用者。

  • 将输出写入流时,如果换行符为 None,则写入的任何 '\n' 字符都将转换为系统默认行分隔符 os.linesep。如果换行符是 '' 或 '\n',则不进行翻译。如果换行符是任何其他合法值,则写入的任何 '\n' 字符都将转换为给定的字符串。

于 2021-10-25T09:54:58.687 回答
-1

在文件上运行 autopep8

> apt-get install python-autopep8

> autopep8 python_file_name > new_python_file_name.py
于 2016-05-28T15:50:42.400 回答