【问题标题】:Python: Converting a byte object to string, removing \'s, then writing to list brings back \'s. slashesPython:将字节对象转换为字符串,删除 \'s,然后写入列表带回 \'s。斜线
【发布时间】:2020-04-10 12:37:57
【问题描述】:

我正在解析当前为字节形式的 html,方法是将其转换为字符串,然后将其写入列表。 我想删除所有正斜杠(甚至只是很好地处理转义字符)。

这是我的代码:

picture_divs = [b'<img alt="Python\'s Confusing me." class="" src="https://link_goes_here" style="whatever;"/>']

def get_alt_text(picture_divs):
    alt_text = []
    for i, elem in enumerate(picture_divs):
        str_elem = str(elem).replace('\\', '')  # Convert bytes -> strings
        start_index = int(str_elem.find('alt='))
        end_index = int(str_elem.find('class='))
        alt_text.append(str_elem[start_index + 4:end_index])

    return alt_text


alt_text_return = get_alt_text(picture_divs)
print(alt_text_return)

输出: ['"Python 让我很困惑。" ']

期望的输出: ['“Python 让我很困惑。” ']

【问题讨论】:

  • 您想要的输出是不可能的。字符串由' 分隔,因此这些 必须 被转义,否则它们会关闭字符串。这是一个语法错误:'"Python's Confusing me." '

标签: python string byte


【解决方案1】:

您要求的解决方案是 python 语法错误。 Python 创建格式列表

list_example = ['a','b']

如果您希望在列表中显示“Python 的困惑”,那么您会看到打开的单引号是如何被单引号关闭的。所以python放反斜杠是为了覆盖单引号而不是抛出错误。

【讨论】:

  • 啊哈!所以你说的是 alt_text[0] is 格式正确,但列表需要正确的 Python 语法才能工作。准确吗?
  • 是的,如果你在返回之前打印出你的字符串,那么你可以看到它的格式是正确的,只是append函数会修改它。
【解决方案2】:

这是一种可能的清理方法:

>>> from re import sub
>>> picture_divs = [b'<img alt="Python\'s Confusing me." class="" src="https://link_goes_here" style="wha
tever;"/>']
>>> for div in picture_divs:
...     rev1 = sub(r'[\\/]', '', div.decode('utf-8'))
...     rev2 = rev1.replace('\'', "'")
...     print(rev2)
... 
<img alt="Python's Confusing me." class="" src="https:link_goes_here" style="whatever;">
>>> 

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多