相关疑难解决方法(0)

YAML和JSON有什么区别?什么时候比较喜欢一个

考虑到以下因素,我们何时应该优先使用YAML而不是JSON,反之亦然?

  • 性能(编码/解码时间)
  • 内存消耗
  • 表达清晰度
  • 库可用性,易用性(我更喜欢C)

我计划在嵌入式系统中使用这两个中的一个来存储配置文件.

有关:

我应该使用YAML或JSON来存储我的Perl数据吗?

json yaml

673
推荐指数
12
解决办法
30万
查看次数

Python序列化 - 为什么要pickle?

我知道Python pickling是一种以对象编程方式"存储"Python对象的方式 - 与用txt文件或DB编写的输出不同.

关于以下几点,您有更多细节或参考资料:

  • 腌制对象"存储"在哪里?
  • 为什么酸洗保留对象表示比存储在DB中更多?
  • 我可以从一个Python shell会话中检索pickled对象吗?
  • 序列化有用时,您是否有重要的示例?
  • 用pickle进行序列化是否意味着数据"压缩"?

换句话说,我正在寻找一个关于酸洗的文档 - Python.doc解释了如何实现pickle但似乎没有深入了解有关序列化的使用和必要性的细节.

python serialization pickle

83
推荐指数
2
解决办法
5万
查看次数

json序列化一个以元组为关键字的字典

有没有办法在Python中序列化使用元组作为键的字典:

a={(1,2):'a'}
Run Code Online (Sandbox Code Playgroud)

简单地使用json.dumps(a),产生:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.6/json/encoder.py", line 367, in encode
    chunks = list(self.iterencode(o))
  File "/usr/lib/python2.6/json/encoder.py", line 309, in _iterencode
    for chunk in self._iterencode_dict(o, markers):
  File "/usr/lib/python2.6/json/encoder.py", line 268, in _iterencode_dict
    raise TypeError("key {0!r} is not a string".format(key))
TypeError: key (1, 2) is not a string
Run Code Online (Sandbox Code Playgroud)

python json

54
推荐指数
5
解决办法
2万
查看次数

如何在redis中存储复杂对象(使用redis-py)

hmset函数可以设置每个字段的值,但我发现如果值本身是一个复杂的结构化对象,则从hget返回的值是序列化字符串,而不是原始对象

例如

images= [{'type':'big', 'url':'....'},
     {'type':'big', 'url':'....'},
     {'type':'big', 'url':'....'}]   

redis = Redis()
redis.hset('photo:1', 'images', images)

i = redis.hget('photo:1', 'images')
print type(i)
Run Code Online (Sandbox Code Playgroud)

i的类型是一个字符串,而不是一个python对象,除了手动解析每个字段之外,还有什么方法可以解决这个问题吗?

python redis

53
推荐指数
7
解决办法
7万
查看次数

如何减少在python中加载pickle文件所花费的时间

我已经在python中创建了一个字典并将其转换为pickle.它的大小达到了300MB.现在,我想加载相同的泡菜.

output = open('myfile.pkl', 'rb')
mydict = pickle.load(output)
Run Code Online (Sandbox Code Playgroud)

加载这个泡菜大约需要15秒.我怎样才能减少这个时间?

硬件规格:Ubuntu 14.04,4GB RAM

下面的代码显示了使用json,pickle,cPickle转储或加载文件所需的时间.

转储后,文件大小约为300MB.

import json, pickle, cPickle
import os, timeit
import json

mydict= {all values to be added}

def dump_json():    
    output = open('myfile1.json', 'wb')
    json.dump(mydict, output)
    output.close()    

def dump_pickle():    
    output = open('myfile2.pkl', 'wb')
    pickle.dump(mydict, output,protocol=cPickle.HIGHEST_PROTOCOL)
    output.close()

def dump_cpickle():    
    output = open('myfile3.pkl', 'wb')
    cPickle.dump(mydict, output,protocol=cPickle.HIGHEST_PROTOCOL)
    output.close()

def load_json():
    output = open('myfile1.json', 'rb')
    mydict = json.load(output)
    output.close()

def load_pickle():
    output = open('myfile2.pkl', 'rb')
    mydict = pickle.load(output)
    output.close()

def …
Run Code Online (Sandbox Code Playgroud)

python performance pickle

30
推荐指数
3
解决办法
3万
查看次数

什么是更快 - 加载酸洗字典对象或加载JSON文件 - 到字典?

什么是更快:

(A)'Unpickling'(正在加载)一个酸洗字典对象,使用 pickle.load()

要么

(B)使用将JSON文件加载到字典 simplejson.load()

假设:在案例A中已存在pickle对象文件,并且在案例B中已存在JSON文件.

python json simplejson pickle

10
推荐指数
1
解决办法
7750
查看次数

jsonpickle 将我的字典键从数字转换为字符串

我试图以一种可以在外部表单中读取它们的方式序列化我的对象,并找到了 jsonpickle。但事实证明它将我的字典键从整数转换为字符串。

我注意到这个线程只使用 JSON 包来解决这个问题,但我希望 jsonpickle 能够解决这个问题。有任何已知的解决方法吗?或者是否有更好的文本模式序列化格式可用于 Python?

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
>>> a={}
>>> a[11]="eleventy"
>>> a[22]="twice that"
>>> a
{11: 'eleventy', 22: 'twice that'}
>>> import jsonpickle
>>> jstring=jsonpickle.encode(a)
>>> jstring
'{"22": "twice that", "11": "eleventy"}'
>>> b=jsonpickle.decode(jstring)
>>> b
{'22': 'twice that', '11': 'eleventy'}
>>> 
Run Code Online (Sandbox Code Playgroud)

更新:短期内我的工作是拥有并行保存功能——一个用于 pickle,一个用于 jsonpickle。由于我的对象很复杂(循环引用),我无法摆脱无法处理的对象。我最初的要求是拥有一种可以在文本编辑器中读取的格式,这样我就可以检测逻辑问题,只要常规 pickel 是可靠的(它是),那么现在就可以了。有一天我可能想让其他一些非 Python 软件吃掉这个文件,所以我想找到一个可用的解决方案。XML 格式?Python 社区似乎对序列化为 XML 不太感兴趣。至少我还没有找到一个像 pickle/jsonpickle 一样容易工作的包。

python

5
推荐指数
2
解决办法
3057
查看次数

将dict保存到pickle还是写入文件?

我有一个 Python 脚本,它返回一个 dict,我想将其存储在某个地方以在更大的项目中使用(该脚本运行速度很慢,所以我不想在每次需要字典时只导入脚本)。

字典很小,所以我看到两个选项。我可以:

  1. 将dict保存到pickle文件
  2. 将 dict 作为文字写入新的 .py 文件,如下所示:

    my_dict = slow_func()
    with open('stored_dict.py', 'w') as py_file:
        file_contents = 'stored_dict = ' + str(my_dict)
        py_file.write(my_dict)
    
    Run Code Online (Sandbox Code Playgroud)

    然后我可以使用访问字典文字 from stored_dict import stored_dict

我应该更喜欢这些选项之一吗?

python pickle

4
推荐指数
2
解决办法
8160
查看次数

标签 统计

python ×7

pickle ×4

json ×3

performance ×1

redis ×1

serialization ×1

simplejson ×1

yaml ×1