Python相当于R< dput()函数

时间:2014-03-15 02:45:25

标签: python r

在py中是否有类似于R中的dput() function的函数?

5 个答案:

答案 0 :(得分:7)

将Python对象序列化为文件有几种选择:

  • json.dump()以JSON格式存储数据。它非常易读和可编辑,但只能存储列表,字符串,字符串,数字,布尔值,因此不存在复合对象。您需要import json才能使json模块可用。
  • pickle.dump()可以存储大多数对象。

不太常见:

  • shelve模块在​​DBM数据库中存储多个Python对象,大多数情况类似于持久性dict
  • marshal.dump():不确定您何时需要。

答案 1 :(得分:7)

表示pandas.DataFrameprint(df.to_dict()),如here

所示

答案 2 :(得分:2)

此答案集中于json.dump()json.dumps()以及如何将它们与numpy数组一起使用。如果您尝试这样做,Python会错误地提示您ndarrays不能序列化JSON:

import numpy as np
import json

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
json.dumps(a)
TypeError: Object of type 'ndarray' is not JSON serializable

您可以通过先将其翻译为列表来避免这种情况。请参见下面的两个工作示例:

json.dumps()

json.dumps()似乎最接近R的dput(),因为它允许您直接从控制台复制粘贴结果:

json.dumps(a.tolist()) # '[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'

json.dump()

json.dump()dput()不同,但它仍然非常有用。 json.dump()会将您的对象编码为json文件。

# Encode:
savehere = open('file_location.json', 'w')
json.dump(a.tolist(), savehere)

然后可以在其他地方解码:

# Decode:
b = open('file_location.json', 'r').read()   # b is '[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'
c = json.loads(b)

然后您可以将其再次转换回一个numpy数组:

c = np.array(c)

更多信息

有关避免“不可序列化”错误的信息,请参见:

答案 3 :(得分:2)

至今无人提及 repr() 对我来说是个谜。 repr() 几乎与 R 的 dput() 所做的完全一样。举几个例子:

>>> a = np.arange(10)
>>> repr(a)
'array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])'
>>> d = dict(x=1, y=2)
>>> repr(d)
"{'x': 1, 'y': 2}"
>>> b = range(10)
>>> repr(b)
'range(0, 10)'

答案 4 :(得分:0)

IMO,json.dumps()(注意 s )更好,因为它返回一个字符串,而json.dump()需要你写一个文件。