我有一个大文件(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/