从千兆字节的.txt文件中读取JSON并添加到同一列表中

时间:2016-03-14 20:26:13

标签: python json

我有300个txt个文件(每个文件介于80-100mb之间),我必须放在list个对象上并同时使用所有内容。我已经创建了一个可行的解决方案,但不幸的是,当我加载超过3个txt-s时,它会因MemoryError而崩溃。我不确定它是否重要,但我有很多内存,所以如果可以解决问题,我可以轻松地将30GB加载到内存中。

基本上我想循环遍历同一for循环中的300 txt个文件。是否可以创建一个包含30GB内容的列表对象?或者以任何不同的方式实现它?如果有人可以向我解释理想的解决方案或任何有用的提示,我将非常感激。

这是我尝试的方法,它在加载3 txt后产生内存错误。

def addContentToList(filenm):
    with open(filenm, encoding="ISO-8859-1") as v: 
        jsonContentTxt.extend(json.load(v))

def createFilenameList(name):
    for r in range(2,300):
        file_str = "%s%s.txt" % (name, r,)
        filenames.append(file_str)


filename1 = 'log_1.txt'
filename2 = 'log_'
filenames = []

jsonContentTxt = []

with open(filename, encoding="ISO-8859-1") as f:    

    jsonContentTxt = json.load(f)

createFilenameList(filename2)

for x in filenames:
    addContentToList(x)


json_data = json.dumps(jsonContentTxt)

content_list = json.loads(json_data)

print (content_list)

1 个答案:

答案 0 :(得分:2)

Put down the chocolate-covered banana and step away from the European currency systems.

文本文件是一个真的错误的想法来存储这样的数据。您应该使用数据库。我建议PostgreSQLSQLite

除此之外,您的错误可能是因为使用了32位版本的Python(将内存分配限制为2GB),而是使用64位。即便如此,我认为通过使用更合适的工具和分配30GB的内存空间会让你感觉更好。