龙空技术网

python简简单单写个批量CSV合并工具(多进程)

ICT工匠 370

前言:

今天姐妹们对“python合并多个csv”大约比较关心,咱们都想要学习一些“python合并多个csv”的相关知识。那么小编同时在网摘上汇集了一些关于“python合并多个csv””的相关资讯,希望看官们能喜欢,姐妹们快快来了解一下吧!

1、功能快速实现批量CSV文件的合并,1000个CSV文件只需13秒合并完2、代码实例(多进程)import osimport csvimport multiprocessingimport timedef process_csv(file):    filepath = os.path.join(r'D:\py\data', file)    with open(filepath, 'r') as f:        reader = csv.reader(f)        rows = []        for row in reader:            # 处理CSV文件的每一行数据            processed_row = process_row(row)            rows.append(processed_row)    return rowsdef process_row(row):    # 这里可以对每一行数据进行处理,根据实际需求进行操作    processed_row = row    # 示例:将每个元素转换为大写    processed_row = [item.upper() for item in processed_row]    return processed_rowdef do(csv_files):    pool = multiprocessing.Pool()    results = pool.map(process_csv, csv_files)    pool.close()    pool.join() # 合并所有结果到一个列表    merged_rows = []    for rows in results:        merged_rows.extend(rows)    # 将合并后的结果写入到输出文件    output_filepath = os.path.join(r'D:\py', 'output.csv')    with open(output_filepath, 'w', newline='') as output_file:        writer = csv.writer(output_file)        writer.writerows(merged_rows)if __name__ == '__main__':    csv_files = os.listdir(r'D:\py\data')    start_time = time.time()  # 记录起始时间    do(csv_files)    end_time = time.time()  # 记录结束时间    elapsed_time = end_time - start_time  # 计算经过的时间    print(f"执行耗时: {elapsed_time}秒")3、效果图

程序启动时CPU使用峰值到达100%。

4、实现过程讲解

在这段代码中,pool.map(process_csv, csv_files)的作用是使用多进程方式并行处理多个CSV文件。具体解释如下:

pool是一个multiprocessing.Pool()对象,创建了一个进程池。pool.map(process_csv, csv_files)调用map()方法,该方法接收两个参数:process_csv函数和csv_files列表。map()方法会将csv_files列表中的每个元素(即CSV文件名)传递给process_csv函数,并以多进程方式并行执行process_csv函数。在process_csv函数中,打开指定的CSV文件,并逐行读取文件内容,对每一行数据调用process_row函数进行处理。process_row函数是一个示例函数,用于对每一行数据进行处理。在这里,它将每个元素都转换为大写形式。处理完成后,将每个CSV文件的处理结果存储到results列表中。

5、用单进程读取同样的文件效率对比

1、下面用单进程方式合并同样数据的文件则需要耗时20秒,比多进程方式慢了将近一半

2、单进程运行效果图

3、代码实例(单进程)import osimport csvfrom timer import get_timedef process_csv(file):    filepath = os.path.join(r'D:\py\data', file)    with open(filepath, 'r') as f:        reader = csv.reader(f)        rows = []        for row in reader:            # 处理CSV文件的每一行数据            processed_row = process_row(row)            rows.append(processed_row)    return rowsdef process_row(row):    # 这里可以对每一行数据进行处理,根据实际需求进行操作    processed_row = row    # 示例:将每个元素转换为大写    processed_row = [item.upper() for item in processed_row]    return processed_row@get_timedef do(csv_files):    results = []    for file in csv_files:        result = process_csv(file)        results.append(result)    merged_rows = []    for rows in results:        merged_rows.extend(rows)    #将合并后的结果写入到输出文件    output_filepath = os.path.join(r'D:\py', 'output.csv')    with open(output_filepath, 'w', newline='') as output_file:        writer = csv.writer(output_file)        writer.writerows(merged_rows)if __name__ == '__main__':    csv_files = os.listdir(r'D:\py\data')    do(csv_files)

6、总结

当我们使用多进程编程时,我们可以同时运行多个进程,每个进程都有自己的一份代码、数据和资源。Python提供了多个库来实现多进程编程,其中最常用的是multiprocessing模块。

Python中的多进程编程有以下几个优点:

提高计算性能:通过并行执行多个进程,可以充分利用多核处理器的计算能力,加快程序的运行速度。实现异步任务:多进程可以同时执行多个任务,其中一个任务阻塞不会影响其他任务的执行,从而实现异步任务的效果。充分利用资源:多进程可以分配和管理系统的资源,使得程序可以更好地利用计算机的硬件资源。

下面是Python多进程编程的一般步骤:

导入multiprocessing模块:首先需要导入multiprocessing模块,它提供了创建和管理进程的类和函数。创建进程:使用multiprocessing.Process()类可以创建一个新的进程。定义进程要执行的任务:将要在新进程中执行的代码放入一个函数或方法中。启动进程:调用进程对象的start()方法启动新进程。等待进程结束:可以使用join()方法等待进程执行完成。

标签: #python合并多个csv #python多进程第三方库 #多进程处理数据 #多进程管理 #pythoncsv文件合并