【发布时间】: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