Как я могу устранить ошибку памяти в Python?

Нижеприведенная программа, которая извлекает некоторые определенные значения столбцов из текстового файла, разделенного разделителем «~», выдает ошибку памяти, когда количество записей в текстовом файле составляет около 6 000 000 PLUS. Однако тот же фрагмент работает для меньшего количества записей в текстовом файле. Я попытался использовать понимание списка, но не смог устранить ошибку памяти. Ниже приведен фрагмент кода:

import os
import csv

print("Analyzing the File!")

tnum = list()
nl = 0
total = list()
fdata = list()
amount = list()

with open(r"C:\Users\aojha\Desktop\20191125\ABC.TXT", "r") as fh:
 next(fh)
 for line in fh:
    line   =  line.rstrip()
    nl+=1

print("Number of records in file are:",nl)

with open(r"C:\Users\aojha\Desktop\20191125\ABC.TXT", "r") as fh:
 next(fh)
 fdata = [line.split("~") for line in fh]

##print(fdata)

for data in fdata:
    tnum.append((data[2][:]).split(" "))
    total.append((data[8][:]))
    amount.append((data[13][:]))
    #print(fdata)

print("Required data from file have been extracted!")}

Образец входных данных имеет следующий формат:

P ~ LNL ~ 22248370 ~ 50 ~ 22248370 ~ 20190916 ~ 20191112 ~ 20190916 ~ 002 ~ I ~ A ~ N ~ 003 ~ 1638 ~ 01 ~ 001 ~ 400023 ~ -1552 ~ 20190916 ~ 0200058 ~ 001 ~ X ~~ TMID ~~~ ~~ 000 ~ 000 ~~ 000 ~ 000 ~ 000 ~~ 000 ~ 000 ~ 0 ~~~~ N ~~~

Полученная ошибка выглядит следующим образом:

> Traceback (most recent call last): File "C:\Users\aojha\Desktop\Python\Random\Type_Count.py", line 23, in <module> fdata = [line.split("~") for line in fh] File "C:\Users\aojha\Desktop\Python\Random\Type_Count.py", line 23, in <listcomp> fdata = [line.split("~") for line in fh] MemoryError


person Amit O.    schedule 03.02.2020    source источник
comment
Пытался использовать буферизацию, а также комбинацию буферизации и чтения построчно, но все еще получалась ошибка памяти. См. Фрагмент ниже: with open(r"C:\Users\aojha\Desktop\Type 60\ABC.TXT", "r", buffering=100000) as fh: next(fh) ## fdata = [line.split("~") for line in fh] for line in fh: line = line.rstrip() if line: line = line.split("~") fdata.append(line)   -  person Amit O.    schedule 04.02.2020
comment
Какова цель кода - какую проблему он призван решить? Измените вопрос, чтобы объяснить это.   -  person kaya3    schedule 04.02.2020
comment
@ kaya3: Упомянул цель кода.   -  person Amit O.    schedule 04.02.2020


Ответы (1)


Наконец-то я решил эту проблему. Используемый sqlite для хранения данных, поскольку текстовый файл в моем случае имел размер 5 ГБ, а для хранения данных csv / text в sqlite я использовал считыватель csv и считывал эти данные с помощью функции генератора /

person Amit O.    schedule 08.02.2020