【问题标题】:How can I resolve Memory Error in Python?如何解决 Python 中的内存错误?
【发布时间】:2020-02-08 15:29:40
【问题描述】:

当文本文件中的记录数约为 6,000,000 PLUS 时,以下程序从由分隔符“~”分隔的文本文件中提取某些特定列值会引发内存错误。但是,相同的 sn-p 适用于文本文件中较少数量的记录。我尝试使用列表理解,但无法解决内存错误。下面是代码sn-p:

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

【问题讨论】:

  • 尝试使用缓冲以及缓冲和逐行读取的组合,但仍然出现内存错误。见下文 sn-p: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)
  • 这段代码的目的是什么——它打算解决什么问题?请编辑问题以解释这一点。
  • @kaya3:提到了代码的用途。

标签: python-3.8 large-text


【解决方案1】:

终于,我解决了这个问题。使用 sqlite 存储数据,因为我的文本文件大小为 5Gb,为了将 csv/文本数据存储在 sqlite 中,我使用 csv reader 并使用生成器函数读取这些数据/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多