【笔记】30行代码,低内存占用解读超大csv文件
import shleximport datetimeif __name__ == "__main__":
File_All_Path = r"D:\1000W行.csv"# 以二进制方式读取文件
File_ID = open(File_All_Path, "rb")
LineNumber = 0# 创建行号变量
Read_Title = False# 创建是否读标题变量
Start_Time = datetime.datetime.now()# 计时开始
Line_Decode = "GBK"# 设置编码
while 1:
Line_Byte = File_ID.readline()# 读入一行二进制内容
if not Line_Byte: break# 判断二进制文本是否为空,为空则到文件尾部,跳出循环
RowTest = Line_Byte.decode(Line_Decode).rstrip()# 编码转换,并去除尾部的换行符号
LineNumber += 1# 行号变量自增
if LineNumber == 1 and Read_Title == False: continue# 是否读取第1行标题
if LineNumber == 1000000:# 读取第100W行内容
str = shlex.shlex(RowTest, posix=True)# 解析行内容数据,以逗号分割,不分割引号内容中的逗号
str.whitespace = ','
str.whitesapce_split = True
ListTest = list(str)
print(LineNumber, ListTest)
End_Time = datetime.datetime.now()
print("耗时:", End_Time - Start_Time)
File_ID.close() 幻象 发表于 2019-8-18 17:30
原理是Line_Byte这个变量只申请了一次,后面的数据对其覆盖,这样来节省内存的?
因为是一行一行的读取,不是一次性载入全部,读取了一行上一行的内存就被释放了 mzussle 发表于 2019-8-17 23:44
换成excel试试
:lol一个Excel里面一张表只能存100W数据,现有的方法模块,都能解决啦 换成excel试试{:1_886:} 对不起,是24行。
用封装好的我一行代码就够了{:1_893:} 谢谢可以来试试看 谢谢楼主,先备份收藏了,有需要的话会试试的。 原理是Line_Byte这个变量只申请了一次,后面的数据对其覆盖,这样来节省内存的? 有现行的库。。。 gavinfeng 发表于 2019-8-18 21:50
有现行的库。。。
啥库?当时在网上找了不行,csv库读不了数据太多的
页:
[1]
2