Python 我能在没有垃圾的情况下腌制绳子吗?

Python 我能在没有垃圾的情况下腌制绳子吗?,python,pickle,Python,Pickle,假设我有一个字符串“[a,B,C]”,我想把它转换成一个列表[a,B,C],我在谷歌上搜索过,我知道我应该使用pickle,但在我pickle.load之前,我似乎必须pickle.dumps对象,这是真的吗?如果是,我该如何处理这个问题?字符串“[A,B,C]”既不是pickle格式,也不是我已知的任何其他序列化格式。它也不是Python代码 如果您只想反序列化某些数据(例如,从文件中读取),我建议使用。它易于编写,解析速度快,是一个成熟的标准 >>> import json

假设我有一个字符串“[a,B,C]”,我想把它转换成一个列表[a,B,C],我在谷歌上搜索过,我知道我应该使用pickle,但在我
pickle.load
之前,我似乎必须
pickle.dumps
对象,这是真的吗?如果是,我该如何处理这个问题?

字符串“[A,B,C]”既不是pickle格式,也不是我已知的任何其他序列化格式。它也不是Python代码

如果您只想反序列化某些数据(例如,从文件中读取),我建议使用。它易于编写,解析速度快,是一个成熟的标准

>>> import json
>>> data_json = '["A", "B", "C"]'
>>> data = json.loads(data_json)
>>> data
[u'A', u'B', u'C']
>>> data_json = json.dumps(data)
>>> data_json
'["A", "B", "C"]'

pickle.dumps
是将Python对象序列化为pickle字符串的函数,
pickle.load
将序列化的pickle字符串转换为Python对象。您基本上是在询问如何反序列化未序列化的对象。答案是你不能


但是,bikeshreder是正确的——您的字符串已经是JSON的序列化格式,因此您可以使用
JSON.loads

哦,是的,谢谢!我真傻!我应该双引号A B和C。但它给了我类似于[u'A',u'B'…]的东西,为什么会这样?
u'foo'
u“foo”
是同一字符串的两种不同表示形式。字符串前面的
u
表明这是一个
unicode
字符串,而不仅仅是一个
bytestring
。JSON使用UTF-8编码,JSON字符串的正确表示形式是Python unicode字符串。如果Unicode字符串只包含ASCII,则可以将其与普通字符串进行比较,而无需任何特殊语法
u'foo'=='foo'
True
@bikeshedder谢谢,我可以将python源代码的编码也指定为UTF-8吗?将
#-*-编码:UTF-8-*-
添加到源文件中。在源代码中指定unicode字符串时,还应使用
u''
引用它们。顺便说一句,Python 3默认使用UTF-8,没有前缀的字符串是unicode,带有
b
前缀的字符串是ByTestRing。我默默地假设您使用的是Python 2。但是如果我使用json,它会给我类似于[u'A',u'B',…]的东西,这是因为我的数据文件被编码为utf-8,所以这里的u代表编码吗?@dorafmon您能发布您的代码吗?这看起来像Python的字符串格式,而不是JSON。
JSON.loads(self.graphroot.find(“.//node[@key=\”“+str(vertex.key)+“\”])[0].text)
我正在使用elementTree读取一些xml文件,然后使用JSON.loads将元素的文本转换为列表。@dorafmon哦,那好吧。如果您
打印
json
获取的字符串列表,它会将“u”放在前面,表示它是unicode。这种行为是因为
print
的工作方式,而不是因为JSON。