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

use*_*925 3 python csv dictionary pickle jsonpickle

我想在一个文件中写一个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)
Run Code Online (Sandbox Code Playgroud)

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

d = pd.read_csv('name.csv')
d = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

jsb*_*eno 5

只需使用pickleCSV而不是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)
Run Code Online (Sandbox Code Playgroud)

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

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

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