从具有极大字段大小的csv文件填充字典

时间:2014-08-22 03:33:39

标签: python csv dictionary import export

当我的字段大小超过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])

2 个答案:

答案 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)