python-3.8 - 如何解决 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
解决方案
最后,我解决了这个问题。使用 sqlite 存储数据,因为我的文本文件大小为 5Gb,为了将 csv/文本数据存储在 sqlite 中,我使用 csv reader 并使用生成器函数读取这些数据/
推荐阅读
- go - SQL 不断打开套接字,导致打开文件过多错误。有没有更好的方法来处理 GO 中的 SQL 连接?
- c# - 如何创建表达式
> 来自 C# 中的 PropertyInfo - firebase - Google Firebase 托管未配置我的证书
- kubernetes - Kubectl : 没有找到资源,即使在命名空间中运行 pod 也很难
- android - android如何在YoutubeBaseActivity上添加带有片段的viewpager?
- mysql - TypeError:无法访问字符串上类型字符串的偏移量
- c# - 新部署的 Azure Web 应用返回 404 错误代码
- flutter - 如何在 showModalBottomSheet 中获取正确的上下文?
- google-cloud-firestore - Firebase Firestore 安全规则“request.auth.ui”不等于“KullaniciId”
- sql-server - SQL Server Express 无法设置登录密码