Как я могу устранить ошибку памяти в Python? - PullRequest
0 голосов
/ 03 февраля 2020

Ниже программа, которая извлекает некоторые определенные значения столбца c из текстового файла, разделенного разделителем "~", выдает ошибку памяти, когда количество записей в текстовом файле составляет около 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 ~ Я ~ А ~ Н ~ 003 ~ ~ 01 тысяча шестьсот тридцать восемь ~ 001 ~ 400023 ~ -1552 ~ 20190916 ~ 0200058 ~ 001 ~ Х ~~ 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

1 Ответ

0 голосов
/ 08 февраля 2020

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

...