我有一个字符串:
s = "['9780310714675', '9780763630614', '9781416925330', '9780310714569']"
当加载到内存中时,它变为:
'[\'9780310714675\', \'9780763630614\', \'9781416925330\', \'9780310714569\']'
我想知道如何将其转换为字符串列表:
strList = ['9780310714675', '9780763630614', '9781416925330', '9780310714569']
我尝试使用以下方法做到这一点:
strList = json.loads(s)
但随后出现以下错误:
Traceback (most recent call last):
File "/home/xxx/dev/python/data-processing/MongoDB/query.py", line 101, in <module>
isbnList = marcQuery.stringToStringList(isbnString)
File "/home/xxx/dev/python/data-processing/MongoDB/query.py", line 74, in stringToStringList
strList = json.loads(s)
File "/home/xxx/anaconda3/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/home/xxx/anaconda3/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/home/xxx/anaconda3/lib/python3.7/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
有人可以给我一些如何做的提示吗?
答案 0 :(得分:1)
只需使用http
函数。它将像评估python表达式一样评估字符串。
eval()
编辑:
有人认为strList = eval(s)
更好。对于生产代码,以及您不信任输入源的任何情况,这都是100%正确的。但是,在学习python并编写爱好项目时,您知道您可以信任输入,因为您编写了它。
ast.literal_eval
我认为告诉新程序员在学习过程中始终遵循适当的数据安全性没有帮助。实际上,我希望他们自己尝试并从错误中学习。
“我知道您还不知道它是如何工作的,而只是复制此魔术代码块,因为它更安全”
关于它们为何不同的参考:https://stackoverflow.com/a/15197698/5987669