flz*_*416 6 python tabs window delimited sliding
我对python和编程很新,但是我试图在一个包含大约700万行python的制表符分隔的.txt文件上运行"滑动窗口"计算.我的意思是滑动窗口是它将运行计算超过50,000行,报告数字然后向上移动说10,000行并在另外50,000行上执行相同的计算.我有计算和"滑动窗口"正常工作,如果我在我的数据的一小部分测试它运行良好.但是,如果我尝试在我的整个数据集上运行该程序,那就非常慢(我现在已经运行了大约40个小时).数学很简单,所以我认为不应该花这么长时间.
我现在正在阅读我的.txt文件的方式是使用csv.DictReader模块.我的代码如下:
file1='/Users/Shared/SmallSetbee.txt'
newfile=open(file1, 'rb')
reader=csv.DictReader((line.replace('\0','') for line in newfile), delimiter="\t")
Run Code Online (Sandbox Code Playgroud)
我相信这是一次性地从所有700万行中生成一本字典,我认为这可能是因为它对于较大的文件而言减慢了很多.
由于我只对一次对数据的"块"或"窗口"进行计算感兴趣,是否有更有效的方法一次只读取指定的行,执行计算然后重复使用新指定的"指定行的块"或"窗口"?
A collections.deque是有序的物品集合,可以采用最大尺寸.当您将项目添加到一端时,另一端会下降.这意味着要迭代你的csv上的"窗口",你只需要继续添加行,deque它将处理丢弃已完成的行.
dq = collections.deque(maxlen=50000)
with open(...) as csv_file:
reader = csv.DictReader((line.replace("\0", "") for line in csv_file), delimiter="\t")
# initial fill
for _ in range(50000):
dq.append(reader.next())
# repeated compute
try:
while 1:
compute(dq)
for _ in range(10000):
dq.append(reader.next())
except StopIteration:
compute(dq)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1567 次 |
| 最近记录: |