有谁知道将一根绳子强行插入一个衬垫的替代方法? 可能是一个python内置方法? 或者更好的实施(解释原因)?
例如:
Hello World
Foo Bar
成为
Hello World Foo Bar
def strip_newline(s):
return ' '.join(mystring.splitlines())
strip_newline = lambda _: ' '.join(_.splitlines())
对于那些提醒我\n
字符替换的人,中有一个字符。缺点是您需要注意
\r
,回车符。 : - )
因此你需要做mystring.replace('\r', ' ').replace('\n', ' ')
。
答案 0 :(得分:3)
我认为简单的replace
是最快的方法:
s = '''
1
2
3
4
5
'''
print (s.replace("\n", " "))
答案 1 :(得分:2)
<强>性能强>
我在bash shell中对两种方法进行了计时,看起来很简单
stri.replace("\n", " ")
比您提出的解决方案更快。
(文件hello.txt是一个包含1000行,短语为“Hello World”的文件。)
~$ time python -c 'f = open("hello.txt","r"); stri = f.read(); stri.replace("\n", " ")'
real 0m0.130s
user 0m0.021s
sys 0m0.023s
~$ time python -c 'f = open("hello.txt","r"); stri = f.read(); " ".join(stri.splitlines())'
real 0m0.317s
user 0m0.032s
sys 0m0.028s
或者,如果您使用readlines()
方法而非read()
方法,则可以取消对splitlines()
的调用,并在那里获得一些性能提升。
~$ time python -c 'f = open("hello.txt","r"); stri = f.readlines(); " ".join(stri)'
real 0m0.176s
user 0m0.033s
sys 0m0.026s
行结尾
我正在使用linux,所以我不必担心\r
字符。但是,在您的情况下,Windows行结尾的格式始终为\r\n
,因此您可以将两次调用替换为replace()
方法
stri.replace("\r", " ").replace("\n", " ")
只需一个电话:
stri.replace("\r\n", " ")
也应该提高性能。
答案 2 :(得分:0)
其他方法是使用str.translate
方法,通过构建翻译字典(char_to_remove:无映射),然后通过str.translate
应用它:
>>> import string
>>> string.whitespace
' \t\n\r\x0b\x0c'
>>> st
'\n1\n2\n3\n4\n5\n'
>>>
>>> dws = dict.fromkeys(ord(c) for c in string.whitespace)
>>>
>>> dws
{32: None, 9: None, 10: None, 11: None, 12: None, 13: None}
>>>
>>> st.translate(dws)
'12345'
当然,这会删除字符串中的空格,您可以通过条件理解跳过这种情况:
>>> dws = dict.fromkeys(ord(c) for c in string.whitespace if c != ' ')
或者简单地说:
>>> import os
>>> os.linesep
'\n' #on my ubuntu box
>>> st.translate({ord(os.linesep):None})
'12345'