9

我想将 Python 多行字符串转换为单行。如果我在 Vim 中打开字符串,我可以在每行的开头看到 ^M。如何处理字符串以使其全部在一行中,每行之间有制表符分隔。Vim 中的示例如下所示:

  Serialnumber
 ^MName           Rick
 ^MAddress           902, A.street, Elsewhere

我希望它是这样的:

Serialnumber \t Name \t Rick \t Address \t 902, A.street,......

每个字符串在一行中。我试过了

   somestring.replace(r'\r','\t')

但它不起作用。另外,一旦字符串在一行中,如果我想在字符串末尾添加一个换行符(UNIX 换行符?),我该怎么做?

4

8 回答 8

9

删除了我之前的答案,因为我意识到这是错误的,我需要测试这个解决方案。

假设您正在从文件中读取它,您可以执行以下操作:

f = open('test.txt', 'r')
lines = f.readlines()
mystr = '\t'.join([line.strip() for line in lines])

正如 ep0 所说,^M 代表 '\r',即 Windows 中的回车符。令人惊讶的是,由于 windows 换行符是 \r\n,所以每行的开头都有 ^M。在行的开头有 ^M 表示您的文件包含 \n\r 。

无论如何,上面的代码使用列表推导来循环读取从test.txt. 对于每个linein lines,我们调用str.strip()以从每行的 ENDS 中删除任何空白和非打印字符。最后,我们调用'\t'.join()结果列表来插入标签。

于 2013-08-01T23:52:55.527 回答
5

您可以将“\r”字符替换为“\t”。

my_string.replace("\r", "\t")
于 2013-08-01T21:27:36.637 回答
3

我使用splitlines()来检测所有类型的线条,然后将所有内容连接在一起。这样您就不必猜测替换 \r 或 \n 等。

"".join(somestring.splitlines())
于 2020-12-24T18:21:00.797 回答
2

这是硬编码。但它有效。

poem='''
If I can stop one heart from breaking,
I shall not live in vain;
If I can ease one life the aching,
Or cool one pain,
Or help one fainting robin
Unto his nest again,
I shall not live in vain.
'''


lst=list(poem)
str=''
for i in lst:
    str+=i
print(str)
lst1=str.split("\n")
str1=""

for i in lst1:
    str1+=i+" "
str2=str1[:-2]
print(str2)
于 2019-03-24T15:40:04.303 回答
0

这发生在 VIM 如何解释 CR(回车),Windows 使用它来分隔新行。你应该只使用一个编辑器(我个人更喜欢 VIM)。阅读:VIM ^M

于 2013-08-01T21:24:21.037 回答
0

这应该做的工作:

def flatten(multiline):
    lst = multiline.split('\n')
    flat = ''
    for line in lst:
        flat += line.replace(' ', '')+' '
    return flat
于 2020-12-23T21:15:37.117 回答
0

这个技巧也很有用,"\n"写成raw string. 喜欢 :

my_string = my_string.replace(r"\n", "\t")
于 2019-02-08T09:16:38.397 回答
0
这应该做的工作:
string = """Name           Rick
 Address           902, A.street, Elsewhere"""

single_line = string.replace("\n", "\t")
于 2021-05-17T16:46:25.987 回答