我有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)
答案 0 :(得分:2)
Put down the chocolate-covered banana and step away from the European currency systems.
文本文件是一个真的错误的想法来存储这样的数据。您应该使用数据库。我建议PostgreSQL和SQLite。
除此之外,您的错误可能是因为使用了32位版本的Python(将内存分配限制为2GB),而是使用64位。即便如此,我认为通过使用更合适的工具和不分配30GB的内存空间会让你感觉更好。