当我的字段大小超过131,072时,我收到了从csv模块导入.csv文件的错误。 csv模块导出的字段超过131,072。这是我对具有巨大规模的字典的价值。我的钥匙很小。我是否需要不同的文件格式来存储具有巨大值的字典?
我在整个程序中使用csv,一直使用它很方便。如果多种数据类型不可避免,那么什么是好的替代方案?我想存储长度可达数千万字符的值。
这是错误消息
dictionary = e.csv_import(filename)
File "D:\Matt\Documents\Projects\Python\Project 17\e.py", line 8, in csv_import
for key, value in csv.reader(open(filename)):
_csv.Error: field larger than field limit (131072)
这是我的代码
def csv_import(filename):
dictionary = {}
for key, value in csv.reader(open(filename)):
dictionary[key] = value
return dictionary
def csv_export(dictionary, filename):
csv_file = csv.writer(open(filename, "w"))
for key, value in dictionary.items():
csv_file.writerow([key, value])
答案 0 :(得分:2)
如果您正在寻找替代方案,您应该只使用pickle。它比从.csv文件转换更快,更容易。
例如。
with open(filename) as f:
dictionary = pickle.load(f)
和
with open(filename) as f:
pickle.dump(dictionary, f)
一个缺点是它不容易被其他语言阅读(如果这是一个考虑因素)
答案 1 :(得分:1)
您可以通过以下方式调整最大字段大小:
>>> import csv
>>> csv.field_size_limit()
131072
>>> old_size = csv.field_size_limit(1024*1024)
>>> csv.field_size_limit()
1048576
有关替代方案,请参阅下文。
您需要一个持久字典,以便使用shelve module。
import shelve
# open shelf and write a large value
shelf = shelve.open(filename)
shelf['a'] = 'b' * 200000
shelf.close()
# read it back in
shelf = shelve.open(filename)
>>> print len(shelf['a'])
200000
它使用pickle
,因此如果您想在Python之外使用shelf文件,则存在兼容性问题。但是如果需要兼容性,你可以使用JSON来序列化你的字典 - 我假设字典的值是字符串。
import json
def dict_import(filename):
with open(filename) as f:
return json.load(f)
def dict_export(dictionary, filename):
with open(filename, "w") as f:
json.dump(dictionary, f)