python - 有效地在 python 中处理大型 .txt 文件

标签 python tabs sliding-window delimited

我对 python 和一般编程还很陌生,但我正在尝试对制表符分隔的 .txt 文件运行“滑动窗口”计算,该文件包含大约 700 万行 python。我所说的滑动窗口的意思是,它将对 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")

我相信这是一次从所有 700 万行中制作字典,我认为这可能是它对于较大文件速度如此之慢的原因。

由于我只对一次对数据的“ block ”或“窗口”运行计算感兴趣,是否有更有效的方法一次只读取指定的行,执行计算,然后重复指定行的新指定“ block ”或“窗口”?

最佳答案

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)

关于python - 有效地在 python 中处理大型 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13401601/

相关文章:

python - Django调试工具栏1.8离线模式

javascript - 添加/删除现有表单字段而不丢失事件

python - 在Python中,如何提取较长字符串中跨越某个索引的所有子字符串?

jquery - 使用 aria-selected=true 识别选项卡并在 jquery 中更改选项卡背景颜色

android - Android 4.0 (API 14) 上的 java.lang.OutOfMemoryError

python - 在Python中不使用 'for'循环滑动搜索窗口

python - python图像上的滑动窗口

python - Bokeh 自定义工具提示相互堆叠

python - 如何在 Pyramid 中异步处理文件上传

python - 将 dtype <U30 的 numpy ndarray 转换为 float