无法将字符串元组转换为 python 中的常规元组
Unable to convert a string tuple into a regular tuple in python
我有一个数据库 select 使用 psycopg2
获得的输出。输出如下所示
result = [('("",Loc,001)',), ('(London,Loc,002)',), ('(Tokyo,Loc,006)',), ('("New York","New Loc",TEST2)',), ('(Berlin,Loc,TEST1)',), ('(Dubai,Loc,TEST4)',)]
此输出是针对 运行 在多个列上的不同查询获得的,例如
SELECT distinct(col1, col2, col3) from table;
但是输出处理起来非常复杂,因为每个元组中的一些字符串没有引号。
我试过做如下的事情
import ast
formatted_result = [item[0] for item in result]
print(ast.literal_eval(formatted_result))
但它抛出以下错误
Traceback (most recent call last):
File "test.py", line 3, in <module>
print(ast.literal_eval(formatted_result))
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
另一个选项是遍历每个元组,用逗号分隔并删除不必要的字符,如下所示
for item in formatted_result:
col1 = item.split(",")[0].replace('(', "").replace( ")", "").replace('"', "")
col2 = item.split(",")[1].replace('(', "").replace( ")", "").replace('"', "")
col3 = item.split(",")[2].replace('(', "").replace( ")", "").replace('"', "")
处理此输出的正确方法是什么?
在您的列周围使用方括号会 return 变成 row-construct
,这就是您的输出看起来一团糟的原因。
query = "select distinct(ts, popularity) from table where id < 28050"
cur.execute(query)
print(cur.fetchall())
>>> [('(1640082115,23)',), ('(1640082115,28)',), ...]
而没有括号的相同查询将 return 预期结果:
query = "select distinct ts, popularity from table where id < 28050"
cur.execute(query)
print(cur.fetchall())
>>> [(1640082115, 23), (1640082115, 28), (1640082116, 51), ...]
我有一个数据库 select 使用 psycopg2
获得的输出。输出如下所示
result = [('("",Loc,001)',), ('(London,Loc,002)',), ('(Tokyo,Loc,006)',), ('("New York","New Loc",TEST2)',), ('(Berlin,Loc,TEST1)',), ('(Dubai,Loc,TEST4)',)]
此输出是针对 运行 在多个列上的不同查询获得的,例如
SELECT distinct(col1, col2, col3) from table;
但是输出处理起来非常复杂,因为每个元组中的一些字符串没有引号。
我试过做如下的事情
import ast
formatted_result = [item[0] for item in result]
print(ast.literal_eval(formatted_result))
但它抛出以下错误
Traceback (most recent call last):
File "test.py", line 3, in <module>
print(ast.literal_eval(formatted_result))
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
另一个选项是遍历每个元组,用逗号分隔并删除不必要的字符,如下所示
for item in formatted_result:
col1 = item.split(",")[0].replace('(', "").replace( ")", "").replace('"', "")
col2 = item.split(",")[1].replace('(', "").replace( ")", "").replace('"', "")
col3 = item.split(",")[2].replace('(', "").replace( ")", "").replace('"', "")
处理此输出的正确方法是什么?
在您的列周围使用方括号会 return 变成 row-construct
,这就是您的输出看起来一团糟的原因。
query = "select distinct(ts, popularity) from table where id < 28050"
cur.execute(query)
print(cur.fetchall())
>>> [('(1640082115,23)',), ('(1640082115,28)',), ...]
而没有括号的相同查询将 return 预期结果:
query = "select distinct ts, popularity from table where id < 28050"
cur.execute(query)
print(cur.fetchall())
>>> [(1640082115, 23), (1640082115, 28), (1640082116, 51), ...]