首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将尾行'\n‘替换为字符串中空格的好方法

将尾行'\n‘替换为字符串中空格的好方法
EN

Stack Overflow用户
提问于 2013-08-14 17:44:27
回答 4查看 288关注 0票数 1

我有一条跨多行(2-3行)的错误消息。我想抓住它并嵌入到警告中。我认为把新行替换成空格是可以的。

我的问题是,哪种方法是最好的做法。我知道这不是最好的问题,但我想正确地编码它。我也可能漏掉了什么。到目前为止,我已经想出了三个方法:

  1. string.replace()
  2. 正则表达式
  3. string.translate()

我倾向于使用string.translate(),但是在阅读了它的工作原理之后,我认为将除'\n‘之外的每个字符都隐藏到自己中是一种过分的做法。对于这样一个简单的任务来说,Regexp看起来也是一种过度浪费。

是否有其他指定的方法,或者我是否应该选择上述的方法之一?比起速度,我更关心可移植性和健壮性,但它仍然有一定的相关性。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-14 17:46:02

只需使用replace方法:

代码语言:javascript
复制
>>> "\na".replace("\n", " ")
' a'
>>>

这是最简单的解决办法。使用Regex是过度的,也意味着您必须导入。translate稍微好一点,但仍然没有提供replace没有提供的东西(当然,除了更多的输入)。

replace也应该运行得更快。

票数 4
EN

Stack Overflow用户

发布于 2013-08-14 17:57:17

如果希望将所有这些实现细节留待python实现处理,您可以这样做:

代码语言:javascript
复制
s = "This\nis\r\na\rtest"
print " ".join(s.splitlines())
# prints: This is a test

注意:

该方法使用通用的换行符方法来分割行。

这意味着:

通用换行符解释文本流的一种方式,在这种方式中,以下所有内容都被认为是行的结尾: Unix结束行约定'\n'、Windows约定'\r\n'和旧Macintosh约定'\r'。有关额外用途,请参阅PEP 278和PEP 3116,以及str.splitlines()

分割行而不是替换linefeed的好处是,您可以过滤掉不需要的行,即避免日志中的杂乱。例如,如果您有traceback.format_exc()的输出

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero

您只需要在日志中添加最后一行:

代码语言:javascript
复制
import traceback
try:
    1/0
except: # of course you wouldn't catch exceptions like this in real code
    print traceback.format_exc().splitlines()[-1]
    # prints: ZeroDivisionError: integer division or modulo by zero

供参考:

票数 3
EN

Stack Overflow用户

发布于 2013-08-14 17:47:27

这是另一种快速/便携的选择。它或多或少与替换相同,但可读性较低。

代码语言:javascript
复制
errMsg = """Something went wrong
            This message is long"""

" ".join(errMsg.splitlines())

对于定时结果,虽然我保证这将根据消息长度而有所不同

代码语言:javascript
复制
>>> s = """\
' '.join('''Something went wrong
            This message is long'''.splitlines())"""

>>> timeit.timeit(stmt=s, number=100000)
0.06071170746817329

>>> q = """'''\
Something went wrong
This message is long'''.replace("\\n",' ')"""

>>> timeit.timeit(stmt=q, number=100000)
0.049164684830429906
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18238694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档