从千兆字节的.txt文件读取JSON并添加到同一个lis

2024-09-30 16:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有300个txt文件(每个文件的大小在80-100mb之间),我应该把它们放到一个list对象中,同时使用所有内容。我已经创建了一个有效的解决方案,但不幸的是,当我加载超过3个txt-s时,它会崩溃。我不确定这是否重要,但我有很多ram,因此如果可以解决问题,我可以轻松地将30GB加载到内存中。你知道吗

基本上我想在同一个for循环中遍历300txt个文件。是否可以创建一个包含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)

Tags: 文件对象内存txtjson内容fordef
1条回答
网友
1楼 · 发布于 2024-09-30 16:36:54

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

像这样存储数据,文本文件真是个坏主意。你应该使用数据库。我推荐PostgreSQLSQLite。你知道吗

除此之外,您的错误可能是由于使用32位版本的Python(这将限制您的内存分配到2GB),而不是使用64位。即便如此,我认为你最好还是使用一个更合适的工具,而不是分配30GB的内存空间。你知道吗

相关问题 更多 >