python将多行转换为单行

时间:2013-08-01 21:21:00

标签: python string

我想将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换行符?),我该怎么做?

8 个答案:

答案 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"))