使用python自动化处理文件夹

使用python自动化处理文件夹,介绍了三个内容:
(1)使用python递归获取文件夹内嵌套子文件和子文件夹路径;
(2)使用python删除文件夹内(也适用于文件夹内可以包括多个嵌套子文件夹的情况)内容相同的重复文件(包括文件名不一样但是内容一样的也可以删除);
(3)自动整理文件,将文件夹内(也适用于文件夹内可以包括多个嵌套子文件夹的情况)不同类型的文件按照后缀名分类整理到不同的分类文件夹内。
这三部分内容可以一起使用,可以自动整理目标文件夹内的文件,然后再删除内容相同的文件。

主要使用的库包括:pandas, os, glob, filecmp, shutil

(1)递归获取文件夹内所有目录列表

思路:使用递归的方法实现,定义一个函数,使用os.listdir()获取某一级目录下的子目录,判断子目录是否为文件夹,若为文件夹,则递归调用该函数,若为文件,则保存该目录。

  • 首先导入需要的库:pandas和os
import os
import pandas as pd
  • 定义一个存储目录的列表
path_list = []  # 定义存储路径的列表
  • 定义获取某一级目录下子目录的函数
def list_all_path(path):
    if os.path.isdir(path):    # 判断给定路径是否为目录
        try:                   # 捕获可能会产生的异常
            for per_path in os.listdir(path):    # 迭代所有目录列表
                list_all_path(os.path.join(path, per_path))   # 递归列出完整路径
        except PermissionError as err:      # 防止某些目录无法列出所造成的权限异常
            pass
    else:
        global path_list      # 使用glob声明path_list为全局变量
        path_list.append(os.path.normpath(path)) # 使用os.path.normpath()对给定路径进行格式化处理
  • 递归调用list_all_path函数
if __name__=='__main__':
	goal_path = 'D:/华为云盘/毕业设计/参考文献'     # 使用的是本人电脑上的目录,可自行更改
    list_all_path(goal_path)  
    pd.Series(path_list).to_csv('./list.csv', encoding='utf_8_sig')  # 将列表转换为Pandas的Series类型存储到csv文件中
    # encoding格式设置为'utf_8_sig',否则会出现中文乱码问题,亲测'utf_8'无效

其实也可以使用os.walk()列出目录,会比递归的方法更加简便

(2)自动清理电脑内重复文件

思路:遍历获取给定文件下的所有文件,然后通过嵌套循环两两比较文件是否相同,若相同则删除后者

  • 首先导入需要的库:glob和os和filecmp
import os
import glob
import filecmp
  • 定义需要的路径和列表
# 需要清理的目标文件夹
dir_path = 'C:/Users/wyh/Desktop/参考文献'
# 存储文件绝对路径的列表
file_list = []  
  • 遍历获取所有文件的绝对路径,存储至列表file_list中
for file in glob.glob(os.path.join(dir_path, '**', '*'), recursive=True):
    # file可能为文件也可能为文件夹,判断file是否为文件,若file为文件,存储文件的绝对路径至file_list列表中
    if os.path.isfile(file):
        file_list.append(file)
  • 第二步:遍历列表file_list,比较列表中的文件是否相同,若相同,则删除
for file_a in file_list:
    for file_b in file_list:
        # 判断两个路径file_a和file_b是否一致,不一致则进行比较
        # 考虑对列表进行循环嵌套,如果在前面循环中有文件已经被删除,后续比较会报错,因此需要判断文件是否存在
        if file_a != file_b and os.path.exists(file_a) and os.path.exists(file_b):
            if filecmp.cmp(file_a, file_b):
                # 比较两个文件内容是否相同,若相同,则删除后者
                os.remove(file_b)

(3)自动整理文件(根据文件后缀名区分种类)

思路:先获取目标文件夹内所有的文件路径,然后根据文件后缀名不同将其分到不同的分类文件夹内。

  • 首先导入需要的库:glob和os和filecmp
import os
import shutil
import glob
  • 设置文件夹路径(以下路径是本人电脑上的路径,可以根据自己的电脑自行更改)
# 设置一个存储分类后的文件的母文件夹路径
dir_path = r'C:\Users\wyh\Desktop\goal_file'
# 设置需要整理的目标文件夹路径
goal_path = r'C:\Users\wyh\Desktop\参考文献\剂量计算'
# 进行判断,如果dir_path不存在,则创建该文件夹
if not os.path.exists(dir_path):
    os.mkdir(dir_path)
  • 定义变量记录分类的文件和分类后的文件夹的数量
file_num = 0
dir_num = 0
  • 核心循环部分
# 对目标文件夹进行遍历,获取所有子文件和子文件夹路径列表
# 然后对获取的路径列表进行判断,如果为文件的路径则获取文件名和后缀
for file in glob.glob(os.path.join(goal_path, '**', '*'), recursive=True):
    if os.path.isfile(file):
        filename = os.path.basename(file)
        if '.' in filename:
            # 使用-1索引被'.'拆分的最后一位,主要是担心文件名中有多个'.',split会按照'.'进行全部拆分
            suffix = filename.split('.')[-1]
        else:
            suffix = 'others'
        # 判断存储分类文件的子文件夹是否存在,若不存在,则创建,并将文件复制进去
        if not os.path.exists(os.path.join(dir_path, suffix)):
            os.mkdir(os.path.join(dir_path, suffix))
            dir_num += 1
        shutil.copy(file, os.path.join(dir_path, suffix))
        file_num += 1
print('整理完成,将%d个文件整理到了%d个文件夹内' % (file_num, dir_num))
  • 下面是我整理的结果,用于测试的文件类型比较少,分成了jpg、pdf、png三类
    在这里插入图片描述
    在这里插入图片描述

下面将代码整理,完整代码如下

import os
import pandas as pd
import shutil
import glob
import filecmp

path_list = []  # 定义存储路径的列表
def list_all_path(path):
	'''
	函数功能:某一级目录下的子目录路径
	:param path: 某一级目录列表的文件夹路径
	'''
    if os.path.isdir(path):    # 判断给定路径是否为目录
        try:                   # 捕获可能会产生的异常
            for per_path in os.listdir(path):    # 迭代所有目录列表
                list_all_path(os.path.join(path, per_path))   # 递归列出完整路径
        except PermissionError as err:      # 防止某些目录无法列出所造成的权限异常
            pass
    else:
        global path_list      # 使用glob声明path_list为全局变量
        path_list.append(os.path.normpath(path)) # 使用os.path.normpath()对给定路径进行格式化处理
def List_All_Path(goal_path):
	'''
	函数功能:获取目标文件夹下所有嵌套子目录的路径列表并保存是csv文件内
	:param goal_path: 待列出所有目录列表的文件夹路径
	'''
    list_all_path(goal_path)  
    pd.Series(path_list).to_csv('./list.csv', encoding='utf_8_sig')  # 将列表转换为Pandas的Series类型存储到csv文件中
    # encoding格式设置为'utf_8_sig',否则会出现中文乱码问题,亲测'utf_8'无效

def clear_same_file(dir_path):
	'''
	程序逻辑:遍历获取给定文件下的所有文件,然后通过嵌套循环两两比较文件是否相同,若相同则删除后者
	函数功能:清理指定目标文件夹内包括嵌套子文件内所有重复的子文件
	:param dir_path: 清理的目标文件夹路径
	'''
	# 存储文件绝对路径的列表
	file_list = []  
	# 第一步:遍历获取所有文件的绝对路径,存储至列表file_list中
	for file in glob.glob(os.path.join(dir_path, '**', '*'), recursive=True):
    # file可能为文件也可能为文件夹,判断file是否为文件,若file为文件,存储文件的绝对路径至file_list列表中
	    if os.path.isfile(file):
	        file_list.append(file)
	# 第二步:遍历列表file_list,比较列表中的文件是否相同,若相同,则删除
	for file_a in file_list:
		for file_b in file_list:
		# 判断两个路径file_a和file_b是否一致,不一致则进行比较
		# 考虑对列表进行循环嵌套,如果在前面循环中有文件已经被删除,后续比较会报错,因此需要判断文件是否存在
			if file_a != file_b and os.path.exists(file_a) and os.path.exists(file_b):
				if filecmp.cmp(file_a, file_b):
			    	# 比较两个文件内容是否相同,若相同,则删除后者
			        os.remove(file_b)
 
 def classify_file(dir_path, goal_path):
 	'''
	函数功能:自动整理文件,给定一个待整理的文件夹,可以选出该目录下的所有文件,并且根据后缀名归类到不同的文件夹内
	:param dir_path: 存储分类后的文件的母文件夹路径
	:param goal_path: 需要整理的目标文件夹路径
	'''
	# 进行判断,如果dir_path不存在,则创建该文件夹
	if not os.path.exists(dir_path):
	    os.mkdir(dir_path)
	file_num = 0
	dir_num = 0
	# 对目标文件夹进行遍历,获取所有子文件和子文件夹路径列表
	# 然后对获取的路径列表进行判断,如果为文件的路径则获取文件名和后缀
	for file in glob.glob(os.path.join(goal_path, '**', '*'), recursive=True):
	    if os.path.isfile(file):
	        filename = os.path.basename(file)
	        if '.' in filename:
	        # 使用-1索引被'.'拆分的最后一位,主要是担心文件名中有多个'.',split会按照'.'进行全部拆分
	            suffix = filename.split('.')[-1]
	        else:
	            suffix = 'others'
	        # 判断存储分类文件的子文件夹是否存在,若不存在,则创建,并将文件复制进去
	        if not os.path.exists(os.path.join(dir_path, suffix)):
	            os.mkdir(os.path.join(dir_path, suffix))
	            dir_num += 1
	        shutil.copy(file, os.path.join(dir_path, suffix))
	        file_num += 1
	print('整理完成,将%d个文件整理到了%d个文件夹内' % (file_num, dir_num))
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 使用 Python 实现自动化可以使用 Python 脚本来模拟人类的一些操作,从而实现自动化。 例如,你可以使用 Python 脚本来登录你的电子邮件帐户,然后使用特定的条件来搜索电子邮件,并根据需要自动回复或转发电子邮件。 要实现这一点,你需要了解一些 Python 的基础知识,以及如何使用 Python 的电子邮件库来操作电子邮件。你也可以使用 Python 的第三方库,如 selenium 来模拟人类在浏览器中的操作,从而实现自动化测试或者网络爬虫等。 这里是一个使用 Python 实现自动化的简单示例: ``` import os # 自动打开文件 os.system("open /path/to/file") # 自动发送电子邮件 import smtplib server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login("[email protected]", "your_password") msg = "Hello, this is a test email sent from a Python script." server.sendmail("[email protected]", "[email protected]", msg) server.quit() # 自动搜索网站 import requests response = requests.get("https://www.example.com/search?q=keyword") print(response.text) # 自动填写表单 import mechanize br = mechanize.Browser() br.open("https://www.example.com/login") br.select_form(nr=0) br["username"] = "your_username" br["password"] = "your_password" response = br.submit() print(response.read()) ``` 希望这能帮到你! ### 回答2: 使用Python实现自动化是通过编写脚本和程序来自动执行重复的任务和流程。Python编程语言具有简单易学、功能强大和丰富的库和模块等特点,因此非常适合用于自动化。 首先,Python可以用于自动化测试。我们可以使用Selenium库来模拟用户在网页上的操作,如点击按钮、输入文本等,从而进行网站功能的自动化测试。此外,Python还可以用于接口自动化测试,通过发送HTTP请求并验证返回结果来实现接口功能的自动化测试。 其次,Python可以用于文件操作的自动化。我们可以使用os和shutil等库来自动处理文件和文件夹,如批量重命名文件、复制和移动文件等。此外,通过使用Python的xlrd和xlwt库,我们还可以实现Excel文件的读取和写入操作,从而实现Excel的自动化处理。 另外,Python可以用于网络爬虫的自动化。通过使用BeautifulSoup、Scrapy和Requests等库,我们可以编写爬虫程序来自动从网页上获取数据,并进行存储和处理。这在获取大量数据或进行数据分析时非常有用。 此外,Python还可以用于自动化的GUI应用程序开发。通过使用PyQt、Tkinter等库,我们可以编写窗口应用程序,实现图形界面的自动化操作。例如,编写一个批量处理图片的程序,实现自动调整尺寸、添加水印等功能。 总而言之,Python的简洁性、灵活性和丰富的库和模块使其成为实现自动化的理想选择。无论是测试自动化、文件处理、网络爬虫还是GUI应用程序开发,Python都能提供强大的支持,帮助我们提高工作效率和降低人为错误。 ### 回答3: 使用Python实现自动化可以帮助简化重复性的任务,提高工作效率。Python拥有丰富的库和模块,可以帮助我们完成各种自动化任务。 首先,Python可以用于文件和文件夹自动化处理。我们可以使用Python的os模块来批量重命名或移动文件,创建或删除文件夹。这样就能够迅速完成大量文件操作的任务,节省时间和精力。 其次,Python还可以用于Web自动化。我们可以利用Python的selenium库来实现自动化浏览器操作。例如,自动化登录网站,填充表单,爬取网页内容等。这对于需要定期进行网页操作的任务非常有用,可以减轻人工操作带来的繁琐。 此外,Python还可以用于自动化测试。我们可以使用Python的测试框架(如unittest和pytest)来编写自动化测试脚本,以验证代码是否按预期进行。这样可以提高代码质量和稳定性,减少人工测试的工作量。 最后,Python还可以用于项目部署和运维自动化。我们可以使用Python来编写脚本,自动化部署代码、安装依赖包、配置服务器等任务。这将大大简化部署过程,减少错误和时间消耗。 总之,Python的简洁语法和强大的库支持使其成为自动化任务的理想选择。通过使用Python实现自动化,我们能够提高工作效率,减少繁琐的重复操作,从而将更多时间和精力投入到更有意义的工作上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值