加速 python split 过程

Tam*_*osa 1 python csv split

我有一个 4+ GB 大小的文本文件,并且有一个脚本,该脚本根据第一个逗号之前的字符将文件分割成小文件。例如:16,...行转到 16.csv,61,...行转到 61.csv。不幸的是,这个脚本运行了很长时间,我猜是因为写出方法的原因。有什么办法可以加快脚本的速度吗?

import pandas as pd
import csv


with open (r"updates//merged_lst.csv",encoding="utf8", errors='ignore') as f:
    r = f.readlines()

for i in range(len(r)):
    row = r[i]
    letter = r[i].split(',')[0]
    filename = r"import//"+letter.upper()+".csv"
    with open(filename,'a',encoding="utf8", errors='ignore') as f:
        f.write(row) 
Run Code Online (Sandbox Code Playgroud)

mkr*_*er1 5

我不确定这是否真的会产生巨大的差异,或者瓶颈是否在其他地方,但我不会打开和关闭输入中每一行的输出文件,而是打开每个输出文件一次并重用它。

为了同时打开多个文件并使用正确的文件进行写入,我会将它们放入字典中,使用 asletter键:

files = {}

for i in range(len(r)):
    row = r[i]
    letter = r[i].split(',')[0]
    if letter not in files:
        filename = r"import//"+letter.upper()+".csv"
        files[letter] = open(filename,'a',encoding="utf8", errors='ignore')
    f = files[letter]
    f.write(row)
Run Code Online (Sandbox Code Playgroud)

(除了检查之外,if letter not in files您还可以使用files.setdefault。)

您必须在最后关闭它们以确保内容写入磁盘。要么在循环中手动执行:

for f in files.values():
    f.close()
Run Code Online (Sandbox Code Playgroud)

或者您仍然可以使用上下文管理器(with声明),请参阅JonSG 的回答