【问题标题】:Do not escape string in Python 3不要在 Python 3 中转义字符串
【发布时间】:2019-07-02 13:31:24
【问题描述】:

我从文件中获取了一些数据,但经过一些处理后,Python 转义了反斜杠,这是不可取的行为。

Windows 10 上的 Python 3

line = "URL     ABC     \/A\/B\/C\/D" #line of fetched file
tokens = line.split('\t') # tokens = ['URL', 'ABC', '\\/A\\/B\\/C\\/D']

问题不是 Python 中字符串的表示。问题是我需要将输出写入文件,所以当我尝试将tokens[2] 写入文件时,写入的是\\/A\\/B\\/C\\/D 而不是\/A\/B\/C\/D。这是错误的输出。

【问题讨论】:

  • 你是如何将它写入文件的?可以发minimal reproducible example吗?
  • 也许这会回答你的问题:splitting string without escaping
  • Python 仅在您打印字符串的表示形式时显示双反斜杠,它们不在字符串本身中,不应写入文件。你需要展示你是如何写入文件的,以及为什么你认为双反斜杠在那里。
  • 实际上,我有一个字典,我保存令牌的地方,像这样:pdict[tokens[1]] = tokens[2],然后我创建一个 json outJson = json.dumps(pdict, indent=4),然后写入文件:outfile.write(outJson)
  • 反斜杠总是在 json 文件中转义。它是 json 规范的一部分。

标签: python python-3.x string escaping


【解决方案1】:

尝试使用以下命令对字符串进行转义: 在拆分后添加这个

line = "URL ABC \/A\/B\/C\/D" #line of fetched file tokens = line.split('\t') # tokens = ['URL', 'ABC', '\\/A\\/B\\/C\\/D'] tokens[2]=tokens[2].decode('string_escape') ;

【讨论】:

  • AttributeError: 'str' object has no attribute 'decode'
【解决方案2】:

您需要将其作为原始字符串获取,而不是

line = "URL     ABC     \/A\/B\/C\/D" #line of fetched file
tokens = line.split('\t') # tokens = ['URL', 'ABC', '\\/A\\/B\\/C\\/D']

你需要在字符串前加一个r,这样什么都逃不掉。

line = r"URL     ABC     \/A\/B\/C\/D" #line of fetched file
tokens = line.split('\t') # tokens = ['URL', 'ABC', '\\/A\\/B\\/C\\/D']

【讨论】:

  • 给出完全相同的结果,因为'\/' 不是有效的转义字符,因此与'\\/'r'\/' 的解释相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2016-10-11
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多