使用Python多进程遍历文件夹和文件

多进程遍历文件夹和文件

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/15 18:29:06
# @Author : kevin
# @Site : 
# @File : Multi_process_File.py
# @Software: PyCharm
import csv, os
import multiprocessing
import time

# time_start = time.time()  # 程序开始时间

# 导出的Excel的命名及格式
Fil_path_csv = open(r'C:\Users\点雨洛山岚\Desktop\Stu_csv.csv', 'a', newline='', encoding='utf-8-sig')
csv_write = csv.writer(Fil_path_csv, dialect='excel')

Initial_File_path = r"C:"  # 需要遍历文件夹的路径,注意后面不要带\

# 获取初始路径的文件夹,多进程会根据该条目进行进程启用
for root, dirs, files in os.walk(Initial_File_path + "\\"):
    # print(dirs)
    break


# 文件遍历的方法
class Multi_File_path():
    def Multi_path(self, f):
        for dirs in os.walk(f):
            csv_write.writerow(dirs)  # 将遍历的文件路径写入Excel中
            # print(dirs)


if __name__ == "__main__":
    b = 0
    for l in dirs:  # 读取初始路径下的文件夹数量进行进程启动
      a = str(l)
      b += 1
      # 启动多个进程
      multiply_process = multiprocessing.Process(target=Multi_File_path.Multi_path(Multi_File_path,Initial_File_path + "\\" + a))
      multiply_process.start()
# time_end = time.time()  # 程序结束时间
# print(time_end - time_start)  # 程序运行一共用了多久

遍历40万个文件夹大约耗时两分钟。

多进程还有优化空间,例如使用递归将文件夹下面的每个文件夹再启用多进程进行遍历。需要考虑效率问题,如果某个文件夹下面只有一个文件,单独启用一个进程进行遍历效率上不划算。再例如运行程序的CPU性能较低,启动太多进程可能会导致系统卡死等问题,需要权衡。至于为什么不用多线程?。。。。。。。。。。。没研究*_*

其实是因为多线程有GUI锁,好像导致线程无法同一时间调用多核心。
在这里插入图片描述

### 使用Python高效遍历文件夹 为了实现高效的文件夹遍历,在Python中有多种方法可供选择。其中一种常用的方式是利用`os.walk()`函数,该函数能够递归地遍历指定路径下的所有子目录文件[^1]。 ```python import os def traverse_directory(directory_path): for root, dirs, files in os.walk(directory_path): print(f'当前目录: {root}') print('包含的子目录:', dirs) print('包含的文件:', files) traverse_directory('/path/to/directory') ``` 另一种更为简洁且性能更优的选择是使用`pathlib.Path.rglob()`方法来查找特定模式匹配的所有文件。这种方法不仅语法更加直观易懂,而且执行速度也更快[^2]。 ```python from pathlib import Path def find_files_with_pattern(directory_path, pattern='*'): path = Path(directory_path) matching_files = list(path.rglob(pattern)) for file in matching_files: print(file.absolute()) find_files_with_pattern('/path/to/directory', '*.txt') ``` 对于追求极致效率的情况,还可以考虑采用多线程多进程的方式来加速大容量数据集上的操作。通过并行处理不同部分的数据,可以在一定程度上减少总的运行时间[^3]。 ```python from concurrent.futures import ThreadPoolExecutor from pathlib import Path def process_file(file_path): # 对单个文件进行处理的操作 pass def parallel_process_files(directory_path, max_workers=5): path = Path(directory_path) all_files = [file.absolute() for file in path.rglob('*')] with ThreadPoolExecutor(max_workers=max_workers) as executor: executor.map(process_file, all_files) parallel_process_files('/path/to/large_dataset') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值