python - 计算 python 中 30GB+ csv 文件中双引号外的新行数

标签 python regex csv regex-lookarounds text-parsing

我有一个大文件(30GB+)csv,我通过逐 block 解析文件来计算换行符的数量

使用下面的函数

def yieldblocks(file, size=1024*1024):
    while True:
        blocks = file.read(size)
        if not blocks: break
        yield blocks

这样调用它,

sum(bl.count("\n") for bl in blocks(txtfile))

我能够在不到一个小时的时间内计算换行符(我很惊讶这也是我能得到的最好结果)

我的问题是我需要跳过双引号内的新行,因为有些列有多行内容。

我尝试了下面的方法,但它似乎没有用,并且进程在没有结果的情况下退出

sum(.5 if re.search('^[^"]*"(?=[^"]*(?:"[^"]*")*[^"]*$).*$', bl) else 1 for bl in yieldblocks(txtfile))

正则表达式是在一行中查找奇数个双引号字符,并且在一个小文件中工作。

我在 2GB RAM,32 位操作系统上

注意:我尝试了 CSV 模块,但与按 block 计数相比速度较慢,希望我能以某种方式让它工作

最佳答案

这可能适合您。 pandas.read_csv 通常非常快,但我还没有逐 block 尝试过。

import pandas as pd
reader = pd.read_csv('file.csv', sep=',', chunksize=10000, low_memory=True)
line_count = sum(len(chunk) for chunk in reader)

the documentation 中有更多信息(不多) .

关于python - 计算 python 中 30GB+ csv 文件中双引号外的新行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58599693/

相关文章:

python - 无效参数错误 : required broadcastable shapes at loc(unknown)

MySQL REGEXP 不匹配一个以上的单词

python - 从未知行创建数据框

大写反向引用的正则表达式

python - 使用 python 删除空行和空 [ ]

python - 使用 python csv writer 在文本字段中换行

python - 从 Python 脚本查询 Windows 10/8 监视器缩放?

python - 如何在Python中处理API响应

python - Pandas 按月计算唯一出现次数

正则表达式重复 aa,bb,cc