У меня есть фрагмент кода, который выглядит следующим образом:
downloadsByExtensionCount = defaultdict(int)
downloadsByExtensionList = []
logFiles = ['file1.log', 'file2.log', 'file3.log', 'file4.log']
for logFile in logFiles:
log = open(logFile, 'r', encoding='utf-8')
logLines = log.readlines()
for logLine in logLines:
date, time, c_ip, cs_method, s_port, cs_uri_stem, cs_user_agent = logLine.split(" ")
downloadsByExtensionCount[cs_uri_stem] += 1
downloadsByExtensionList.append([date, time, c_ip, cs_method, s_port, cs_uri_stem, cs_user_agent])
каждый из этих четырех файлов занимает около 150 МБ, а каждый содержит около 60 000 - 80 000 строк.
Я начал создавать сценарий, используя только один из этих файлов, потому что мне было проще тестировать функциональность таким образом, но теперь, когда у меня есть вся логика и функциональность, я, конечно, попытался запустить его на всех четырех файлах журнала одновременно.Когда скрипт начинает извлекать данные из четвертого файла, я получаю следующее:
Traceback (most recent call last):
File "C:\Python32\lib\codecs.py", line 300, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
MemoryError
Итак, я посмотрел, сколько памяти потребляет эта вещь, и вот что я нашел:
Скрипт читает первые три файла и достигает где-то около 1800-1950 МБ, затем начинает читать, последний файл увеличивается на 50-100 МБ больше, и затем я получаю ошибку.Я попытался запустить сценарий с последней строкой (добавлением), закомментированной, а затем он занимает около 500 МБ.
Итак, что я делаю не так?Эти четыре файла в совокупности занимают около 600 МБ, а сценарий потребляет около 1500 для заполнения списка только тремя из четырех файлов, что
Я не совсем понимаю, почему .. Как я могу улучшить это?Спасибо.