Эквивалент Python для функции R dput()
Есть ли какая-либо функция в python, похожая на функция dput() в R?
Ответы
Ответ 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", смотрите:
Ответ 4
IMO, json.dumps()
(обратите внимание на s) еще лучше, так как он возвращает строку, а не json.dump()
, которая требует от вас записи в файл.