Есть ли какая-либо функция в 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(), которая требует от вас записи в файл.