我想将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换行符?),我该怎么做?
答案 0 :(得分:4)
删除了我以前的答案,因为我意识到这是错误的,我需要测试这个解决方案。
假设您正在从文件中读取此内容,您可以执行以下操作:
f = open('test.txt', 'r')
lines = f.readlines()
mystr = '\t'.join([line.strip() for line in lines])
正如ep0所说,^ M代表'\ r',它是Windows中的回车字符。令人惊讶的是,你会在每行的开头有^ M,因为windows换行符是\ r \ n。在行的开头有^ M表示您的文件包含\ n \ r \ n。
无论如何,上面的代码使用列表推导来循环遍历从test.txt
读取的每一行。对于line
中的每个lines
,我们调用str.strip()
从每行的ENDS中删除任何空格和非打印字符。最后,我们在结果列表中调用'\t'.join()
以插入标签。
答案 1 :(得分:1)
您可以用“\ t”替换“\ r”字符。
my_string.replace("\r", "\t")
答案 2 :(得分:1)
我使用 splitlines() 检测所有类型的线条,然后将所有线条连接在一起。这样你就不必猜测替换 \r 或 \n 等
"".join(somestring.splitlines())
答案 3 :(得分:0)
这会发生VIM如何解释CR(回车),Windows用来分隔新行。你应该只使用一个编辑器(我个人更喜欢VIM)。阅读:VIM ^M
答案 4 :(得分:0)
此技巧也很有用,将raw string
写为my_string = my_string.replace(r"\n", "\t")
。像:
{{1}}
答案 5 :(得分:0)
这是硬编码。但这有效。
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)
答案 6 :(得分:0)
这应该可以完成工作:
def flatten(multiline):
lst = multiline.split('\n')
flat = ''
for line in lst:
flat += line.replace(' ', '')+' '
return flat
答案 7 :(得分:0)
f = open('test.txt', 'r')
lines = f.readlines()
mystr = ''.join(lines)
print(mystr.replace("\n", "\\n"))