d3p*_*3pd 6 python string tuples literals abstract-syntax-tree
我有一个包含如下表单的数千个元素的列表:
pixels = ['(112, 37, 137, 255)', '(129, 39, 145, 255)', '(125, 036, 138, 255)' ...]
Run Code Online (Sandbox Code Playgroud)
我正在尝试将这些字符串元素转换为元组使用ast.literal_eval,但是在遇到像前导零(例如在显示的第三个元组字符串中)之类的内容时会出现错误SyntaxError: invalid token.
pixels = [ast.literal_eval(pixel) for pixel in pixels]
Run Code Online (Sandbox Code Playgroud)
什么是处理这样的事情的好方法,并将这个字符串列表评估为元组列表?
使用re模块。
>>> import re
>>> import ast
>>> pixels = ['(112, 37, 137, 255)', '(129, 39, 145, 255)', '(125, 036, 138, 255)']
>>> [ast.literal_eval(re.sub(r'\b0+', '', pixel)) for pixel in pixels]
[(112, 37, 137, 255), (129, 39, 145, 255), (125, 36, 138, 255)]
Run Code Online (Sandbox Code Playgroud)
re.sub(r'\b0+', '', pixel)有助于删除前导零。\b单词字符和非单词字符之间的匹配,反之亦然,因此这里必须在零之前和空格或(符号之后存在单词边界。
更新:
>>> pixels = ['(0, 0, 0, 255)', '(129, 39, 145, 255)', '(125, 036, 138, 255)']
>>> [ast.literal_eval(re.sub(r'\b0+\B', '', pixel)) for pixel in pixels]
[(0, 0, 0, 255), (129, 39, 145, 255), (125, 36, 138, 255)]
Run Code Online (Sandbox Code Playgroud)