Python相当于R的dput()函数

Mir*_*abo 28 python r

python中的任何函数是否与R中的dput()函数类似?

Pat*_*ckT 11

pandas.DataFrame,print(df.to_dict())如图所示这里

  • 很好的答案!这正是我一直在寻找的。 (2认同)

Chr*_*ger 10

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

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

不常见:

  • shelve模块在DBM数据库中存储多个Python对象,大多数情况下像持久性一样dict.
  • marshal.dump():不确定你什么时候需要它.


Jon*_*asV 10

How no one has mentioned repr() yet is a mystery to me. repr() does almost exactly what R's dput() does. Here's a few examples:

>>> 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)'
Run Code Online (Sandbox Code Playgroud)

  • 它仍然不如“dput”,因为它不保留列的数据类型:/ (4认同)

Ken*_*HBS 7

这个答案侧重于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)
Run Code Online (Sandbox Code Playgroud)
TypeError: Object of type 'ndarray' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

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

json.dumps()

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

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

json.dump()

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

# Encode:
savehere = open('file_location.json', 'w')
json.dump(a.tolist(), savehere)
Run Code Online (Sandbox Code Playgroud)

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

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

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

c = np.array(c)
Run Code Online (Sandbox Code Playgroud)

更多信息

关于避免“不可序列化”错误,请参阅:


归档时间:

查看次数:

1042 次

最近记录:

7 年,2 月 前