考虑从大型csv文件(80 MB)返回的大型命名项(第一行),其中可能存在间断间隔
name_line = ['a',,'b',,'c' .... ,,'cb','cc']
Run Code Online (Sandbox Code Playgroud)
我正在逐行读取剩余的数据,我只需要处理具有相应名称的数据.数据可能看起来像
data_line = ['10',,'.5',,'10289' .... ,,'16.7','0']
Run Code Online (Sandbox Code Playgroud)
我尝试了两种方法.一个是从读取的每一行弹出空列
blnk_cols = [1,3, ... ,97]
while data:
...
for index in blnk_cols: data_line.pop(index)
Run Code Online (Sandbox Code Playgroud)
另一个是编译与L1名称关联的项目
good_cols = [0,2,4, ... ,98,99]
while data:
...
data_line = [data_line[index] for index in good_cols]
Run Code Online (Sandbox Code Playgroud)
在我使用的数据中肯定会有更好的线条然后坏线虽然它可能高达一半和一半.
我使用cProfile和pstats包来确定我速度最弱的链接,这表明pop是当前最慢的项目.我切换到列表comp,时间几乎加倍.
我想象一种快速的方法是切片检索只有好数据的数组,但对于具有交替空白和良好数据的文件来说这会很复杂.
我真正需要的是能够做到的
data_line = data_line[good_cols]
Run Code Online (Sandbox Code Playgroud)
有效地将索引列表传递到列表中以获取这些项目.现在我的程序在大约2.3秒内运行10 MB文件,弹出帐户大约0.3秒.
是否有更快的方式来访问列表中的某些位置.在C中,它只是取消引用指向数组中正确索引的指针数组.
添加:读取前的文件中的name_line
a,b,c,d,e,f,g,,,,,h,i,j,k,,,,l,m,n,
Run Code Online (Sandbox Code Playgroud)
读取和拆分后的name_line(",")
['a','b','c','d','e','f','g','','','','','h','i','j','k','','','','l','m','n','\n']
Run Code Online (Sandbox Code Playgroud)