我想将 Python 多行字符串转换为单行。如果我在 Vim 中打开字符串,我可以在每一行的开头看到 ^M 。如何处理字符串以使其全部在一行中,每行之间有制表符分隔。Vim 中的示例如下所示:
Serialnumber
^MName Rick
^MAddress 902, A.street, Elsewhere
Run Code Online (Sandbox Code Playgroud)
我希望它是这样的:
Serialnumber \t Name \t Rick \t Address \t 902, A.street,......
Run Code Online (Sandbox Code Playgroud)
每个字符串都在一行中。我试过
somestring.replace(r'\r','\t')
Run Code Online (Sandbox Code Playgroud)
但它不起作用。另外,一旦字符串在一行中,如果我想在字符串末尾添加换行符(UNIX 换行符?),我该怎么做?
我使用splitlines()来检测所有类型的线条,然后将所有内容连接在一起。这样你就不必猜测替换 \r 或 \n 等。
"".join(somestring.splitlines())
Run Code Online (Sandbox Code Playgroud)
删除了我之前的答案,因为我意识到这是错误的,我需要测试这个解决方案。
假设您正在从文件中读取此内容,您可以执行以下操作:
f = open('test.txt', 'r')
lines = f.readlines()
mystr = '\t'.join([line.strip() for line in lines])
Run Code Online (Sandbox Code Playgroud)
正如 ep0 所说,^M 代表 '\r',这是 Windows 中的回车符。由于 windows 换行符是 \r\n,所以在每行的开头都有 ^M 令人惊讶。在行的开头有 ^M 表示您的文件包含 \n\r 。
无论如何,上面的代码使用列表理解来循环从test.txt. 对于每个linein lines,我们调用str.strip()从每行的 ENDS 中删除任何空格和非打印字符。最后,我们调用'\t'.join()结果列表插入选项卡。