Я запускаю следующий скрипт, чтобы добавлять файлы друг к другу, циклически меняя месяцы и годы, если файл существует, я только что протестировал его с большим набором данных, где я ожидаю, что выходной файл будет размером примерно 600 МБ. Однако у меня проблемы с памятью. Во-первых, нормально ли сталкиваться с проблемами памяти (у моего компьютера 8 ГБ оперативной памяти). Я не уверен, как я съедаю все это пространство памяти?
Код, который я запускаю
import datetime, os
import StringIO
stored_data = StringIO.StringIO()
start_year = "2011"
start_month = "November"
first_run = False
current_month = datetime.date.today().replace(day=1)
possible_month = datetime.datetime.strptime('%s %s' % (start_month, start_year), '%B %Y').date()
while possible_month <= current_month:
csv_filename = possible_month.strftime('%B %Y') + ' MRG.csv'
if os.path.exists(csv_filename):
with open(csv_filename, 'rb') as current_csv:
if first_run != False:
next(current_csv)
else:
first_run = True
stored_data.writelines(current_csv)
possible_month = (possible_month + datetime.timedelta(days=31)).replace(day=1)
if stored_data:
contents = stored_data.getvalue()
with open('FullMergedData.csv', 'wb') as output_csv:
output_csv.write(contents)
Трекбек, который я получаю:
Traceback (most recent call last):
File "C:\code snippets\FullMerger.py", line 23, in <module>
contents = stored_output.getvalue()
File "C:\Python27\lib\StringIO.py", line 271, in getvalue
self.buf += ''.join(self.buflist)
MemoryError
Любые идеи, как решить эту проблему или сделать этот код более эффективным для решения этой проблемы. Большое спасибо
АЕА
Редактировать1
После запуска кода, предоставленного alKid, я получил следующую трассировку.
Traceback (most recent call last):
File "C:\FullMerger.py", line 22, in <module>
output_csv.writeline(line)
AttributeError: 'file' object has no attribute 'writeline'
Я исправил вышеуказанное, изменив его на writelines
, однако я все еще получил следующую трассировку.
Traceback (most recent call last):
File "C:\FullMerger.py", line 19, in <module>
next(current_csv)
StopIteration