【问题标题】:Removing continuation characters in the middle of a string in Python在 Python 中删除字符串中间的连续字符
【发布时间】:2013-04-14 16:23:33
【问题描述】:

Google 地图 API 的标准返回值如下所示 - 从字节转换为字符串后:

b'{\n   "destination_addresses" : [ "Washington, DC, USA" ],\n   "origin_addresses" : [ "New York, NY, USA" ],\n   "rows" : [\n      {\n         "elements" : [\n            {\n               "distance" : {\n                  "text" : "370 km",\n                  "value" : 369720\n               },\n               "duration" : {\n                  "text" : "3 hours 48 mins",\n                  "value" : 13672\n               },\n               "status" : "OK"\n            }\n         ]\n      }\n   ],\n   "status" : "OK"\n}\n'

为了进一步处理,我想先删除所有换行符。但是,我不知道该怎么做

results_str.replace('\n', "") 

不起作用,即它返回相同的字符串而不替换 '\n's,因为行继续符。

当我加倍反斜杠时会发生同样的事情

results_str.replace('\\n', "") 

有什么建议吗?

【问题讨论】:

  • “不起作用”是什么意思?如果我做str.replace("\n", ""),它返回相同的字符串,没有所有\ns

标签: python line-breaks


【解决方案1】:
results_str.replace('\n', "") 

你离得太近了。 \ 是字符串文字中的转义字符,因此您必须将其加倍,或使用原始字符串:

results_str.replace('\\n', "") 
results_str.replace(r'\n', "") 

还要记住 Python 字符串是不可变的:replace() 返回一个新字符串,因为无法修改现有字符串。如果要保留更改后的字符串,则必须将其分配给某个名称,例如原始名称:

results_str = results_str.replace(r'\n', "")

尽管您可能希望以不关心换行符的方式处理数据。这看起来像 JSON,所以与其尝试自己解析它,不如使用 Python json 模块。

【讨论】:

  • 感谢您的评论。我之前尝试过加倍:results_str.replace('\\n', ""),但由于某种原因它不起作用。我来看看 JSON 模块
  • 等等,你不是将结果重新分配给results_str吗?我会补充一些关于它的东西。
  • @bluewoodtree:你会results_str = results_str.replace('\\n', "")吗?
  • 天啊。不好意思,早上来的太早了……尴尬……投我一票,关闭这个问题……不过感谢JSON的推荐,看起来很方便
【解决方案2】:

这是一个 JSON 响应。而不是试图弄乱字符串,你应该使用json模块来解析字符串:

import json
result = b'{\n   "destination_addresses" : ...'
obj = json.loads(obj.decode('utf-8'))

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    相关资源
    最近更新 更多