Есть ли какая-либо функция в python, похожая на функция dput() в R?
Эквивалент Python для функции R dput()
Ответ 1
Существует несколько вариантов сериализации объектов Python в файлы:
json.dump()
сохраняет данные в формате JSON. Он очень read- и доступен для редактирования, но может хранить только списки, тексты, строки, числа, логические значения, поэтому нет составных объектов. Прежде чем сделать модульjson
доступным, необходимоimport json
.pickle.dump()
может хранить большинство объектов.
Менее распространенный:
- Модуль
shelve
хранит несколько объектов Python в базе данных DBM, в основном действуя как постоянныйdict
. marshal.dump()
: Не уверен, когда тебе это понадобится.
Ответ 2
для pandas.DataFrame
, print(df.to_dict())
, как показано здесь here
Ответ 3
Этот ответ сфокусирован на json.dump()
и json.dumps()
и на том, как их использовать с массивами. Если вы попытаетесь, 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)
Затем вы можете снова преобразовать его обратно в массив:
c = np.array(c)
Дополнительная информация
о том, как избежать ошибки "not serializable", смотрите:
как сделать классы json сериализуемыми (не связанными, но очень интересными)
Ответ 4
IMO, json.dumps()
(обратите внимание на s) еще лучше, так как он возвращает строку, а не json.dump()
, которая требует от вас записи в файл.