Python 3 с CSV-ридером и StringIO, использующими избыточную память - PullRequest
0 голосов
/ 15 апреля 2019

CSV-файл имеет размер около 500 МБ и 2,7 миллиона строк.Путем всестороннего тестирования я убедился, что for row in read_new: увеличивает потребление памяти в четыре раза, и не могу понять почемуУвеличение памяти не происходит ни до, ни после оператора for.

Может кто-нибудь пролить свет на то, почему это происходит?

Я понимаю, что есть более эффективные способы выполнения этого сценария, ноУ меня есть причины для этого.Я просто пытаюсь выяснить, почему это происходит и есть ли для этой цели более подходящий буфер для использования, чем StringIO ().

import io
import csv
import time

filename = 'rcs_batch_032519.csv'

csv_fob = open(filename, 'r')
fix_fob = io.StringIO()

reader = csv.reader(csv_fob)
writer = csv.writer(fix_fob)

for row in reader:
    writer.writerow(row)

fix_fob.seek(0)
read_new = csv.reader(fix_fob)

# Memory explodes here, from 634MB to 2.36GB, after executing 'for' statement
for row in read_new:
    time.sleep(30)
    pass
...