如何将 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 相同的接口,使用 dump
和 load
可调用文件写入和读取文件。在上面的代码片段中,只需将 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
和使用非逗号分隔符(因为您在类似字典的字符串中使用逗号)。
我想将 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 相同的接口,使用 dump
和 load
可调用文件写入和读取文件。在上面的代码片段中,只需将 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
和使用非逗号分隔符(因为您在类似字典的字符串中使用逗号)。