如何将 Python 字典写入文件而不使它们成为字符串?

How to write Python dictionaries to file without make them strings?

我想将 Python 字典列表写入一个文件。但是,我需要字典(和其中的列表)保留字典,即当我加载文件进行处理时,我希望它们使用字典而不必使用字符串。

这是我将数据写成字符串的示例代码,有没有办法保留原点Python数据结构(在实际代码中,列表数据有数百个字典,每个字典可能有数百个作为值的列表)。我不能简单地腌制数据,原因有很多(其中一个是文件需要人类可读)。

import csv
import pandas as pd

def write_csv_file(data, iteration):
    with open('%s.csv' % 'name', 'wb') as data_csv:
        writer_data = csv.writer(data_csv, delimiter=',')
        for d in data:
            writer_data.writerow([iteration] + [d])


data = [{'a':1, 'b':2}, {'e':[1], 'f':[2,10]}]
iteration = 1
write_csv_file(data, iteration)

目前我使用pandas读取数据文件,按以下方式处理数据。

d = pd.read_csv('name.csv')
d = pd.DataFrame(d)

只需使用 pickle 而不是 CSV 将您的数据写入文件 https://docs.python.org/3/library/pickle.html

import pickle

def write_csv_file(data):

    with open('%s.pickle' % 'name', 'wb') as data_file:
          pickle.dump(data, data_file)

Pickle 将正确序列化并恢复大量数据类型,包括日期时间和大多数用户定义的 类 开箱即用。

但是,如果您需要使用第三方工具手动编辑文件,或者希望它是人类可读的,它可能不是最佳选择。

如果您只需要数字、None、布尔值、列表和字典,并且更喜欢人类可读的文本文件,那么 JSON 是一个不错的选择。 Python 的 json 模块使用与 picle 相同的接口,使用 dumpload 可调用文件写入和读取文件。在上面的代码片段中,只需将 pickle 替换为 json,它将对规定的数据类型起作用。此外,检查文档,以便 json 序列化输出用漂亮的缩进填充,以便真正可读:https://docs.python.org/3/library/json.html

我想你想做的是data serialization. I think one of most common and well known serialization format is JSON. And there is a python module to read and write json files called json

这是一个将转储数据写入 json 文件的示例函数(类似于@jsbueno 在另一个答案中编写的那个)

import json

def write_json_file(data):
     with open('%s.json' % 'name', 'wb') as data_file:
          json.dump(data, data_file)

从 Python 2.6 开始,您可以使用 ast.literal_eval

import ast
ast.literal_eval('{"a":1, "b":2, "c":3}')
{'a': 1, 'b': 2, 'c': 3}

如果您的 pandas DataFrame 的整个列是一个字典,那么您可以正常将其保存为 CSV(使用 , 以外的分隔符),然后将这个类似字典的列字符串映射到字典中:

df['DICTIONARY_COLUMN'].map(ast.literal_eval)

当然,您可以忽略数据框部分 - 您也可以循环或以任何您喜欢的方式转换它们。重要部分是:ast.literal_eval 和使用非逗号分隔符(因为您在类似字典的字符串中使用逗号)。