根据文件名对文件进行分类,移动到以部分文件名命名的文件夹下

本文介绍了一个Python脚本,用于自动化地分类和移动特定格式的文件到相应目录,提高了文件管理效率。
部署运行你感兴趣的模型镜像
[~/Japan_Project/ENM_Migration/Migration_Activity/temp]$ ls
Clssified_CV.py*
134727_L2G-KASUGAISHI011W_ENM_134727_180919_AFTER.zip
134727_L2G-KASUGAISHI011W_ENM_134727_180919_BEFORE.zip
134728_L2G-chenghuang_ENM_134727_180919_AFTER.zip
134728_L2G-chenghuang_ENM_134727_180919_BEFORE.zip

[~/Japan_Project/ENM_Migration/Migration_Activity/temp]$ python Classified_CV.py >> ./Clssified_CV.Log
---  new folder...---
---start move 134727_L2G-KASUGAISHI011W_ENM_134727_180919_AFTER.zip to 134727_L2G-KASUGAISHI011W---
---file move done---
---start move 134727_L2G-KASUGAISHI011W_ENM_134727_180919_BEFORE.zip to 134727_L2G-KASUGAISHI011W---
---file move done---
---  new folder...---
---start move 134728_L2G-chenghuang_ENM_134727_180919_AFTER.zip to 134728_L2G-chenghuang---
---file move done---
---start move 134728_L2G-chenghuang_ENM_134727_180919_BEFORE.zip to 134728_L2G-chenghuang---
---file move done---

[~/Japan_Project/ENM_Migration/Migration_Activity/temp]$ ls
134727_L2G-KASUGAISHI011W/  134728_L2G-chenghuang/  Clssified_CV.py* Clssified_CV.Log

[~/Japan_Project/ENM_Migration/Migration_Activity/temp]$ cd 134727_L2G-KASUGAISHI011W/
[~/Japan_Project/ENM_Migration/Migration_Activity/temp/134727_L2G-KASUGAISHI011W]$ ls
134727_L2G-KASUGAISHI011W_ENM_134727_180919_AFTER.zip
134727_L2G-KASUGAISHI011W_ENM_134727_180919_BEFORE.zip

[~/Japan_Project/ENM_Migration/Migration_Activity/temp]$ cd 134728_L2G-chenghuang/
[~/Japan_Project/ENM_Migration/Migration_Activity/temp/134728_L2G-chenghuang]$ ls
134728_L2G-chenghuang_ENM_134727_180919_AFTER.zip
134728_L2G-chenghuang_ENM_134727_180919_BEFORE.zip

脚本为Classified_CV.py

#!/usr/bin/python
import os, shutil, re

def mkdir(path):

    folder = os.path.exists(path)

    if not folder:
        os.makedirs(path)
        print("---  new folder...---")
    else:
        pass

rootdir = "./"
folder_list = []
for parent,dirnames,filenames in os.walk(rootdir):  #遍历当前目录的文件
    for filename in filenames:
        if not (re.match('\w*.py',filename) or re.match('\w*.Log',filename)):  #这里过滤掉工作目录下的python脚本和生成的log文件
            folder_name = filename.split('_ENM_',1)[0]  #对文件名进行一次拆分,拆分标志为_ENM_,这里取拆分后的列表的第一个元素
            mkdir(folder_name)
            if (folder_name in filename) and not os.path.exists("./" + folder_name + "/" + filename):
                print("---start move " + filename + " to " + folder_name + "---")
                shutil.move(filename,"./" + folder_name)    #移动文件到相关联的文件夹
                print("---file move done---")

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户实现根据文件名创建文件夹移动文件的功能。用户提到了几种不同的方法,包括批处理脚本和Python脚本,我需要先理解这些方法的不同之处,以及用户的具体需求。 首先,用户提供的引用内容中有三个不同的解决方案:一个是批处理脚本(BAT),另一个是Python脚本。用户可能希望知道如何在不同环境下实现这个功能,或者想知道哪种方法更适合他们的具体情况。我需要比较这两种方法的优缺点,并给出清晰的步骤说明。 接下来,我需要确保回答结构清晰,符合用户的要求。用户希望分步解释,并且生成相关问题。同时,必须使用中文,并且正确应用LaTeX格式。不过,这个问题主要涉及文件操作,可能不需要太多数学公式,但如果有变量或路径表达式,可能需要用行内LaTeX,比如$filename$。 我需要先整理批处理脚本的步骤。根据引用[1]和引用[2],批处理脚本使用for循环遍历文件,分割文件名创建文件夹,然后移动文件用户可能需要详细的步骤解释,比如如何分割文件名,如何处理不同的文件类型,以及如何避免移动脚本自身。 然后是Python脚本的方法,引用[3]中的代码使用os和shutil库,遍历文件创建目录移动文件。Python的方法可能更灵活,适合处理更复杂的文件名结构或需要更多逻辑判断的情况。需要解释代码的关键部分,比如os.walk的使用,路径拼接,以及异常处理。 用户可能不太清楚批处理和Python之间的选择,所以需要比较两者的适用场景。比如,批处理适合Windows用户快速处理,无需安装其他环境;而Python适合跨平台或需要更复杂处理的情况。 另外,需要注意用户提到的文件名可能带有多个点号,比如“电影1.1994.xxx.mkv”,这时候批处理中的delims=.可能会错误地分割。例如,如果文件名是“电影1.1994.mkv”,使用tokens=1-2的话,%%a会是“电影1”,%%b是“1994”,而扩展名是mkv。但用户可能希望文件夹名是“电影1”而不是包含年份的部分,或者可能需要调整tokens的数量。这时候需要提醒用户根据实际文件名结构调整delims和tokens的设置。 在Python脚本中,使用os.path.splitext可以正确分割主文件名和扩展名,但如果有多个点号,比如“file.name.txt”,splitext会分成(“file.name”, “.txt”)。这可能更符合用户的需求,因为通常最后一个点号后面是扩展名。所以需要指出这一点差异。 还要考虑文件夹重名的情况,比如是否允许覆盖,或者如果文件夹已存在时如何处理。在批处理中,使用if not exist来检查文件夹是否存在,不存在则创建。Python中的os.mkdir如果文件夹已存在会抛出错误,所以需要用os.makedirs(..., exist_ok=True)来避免错误。 用户可能遇到的问题包括:文件名中有空格导致路径处理错误,特殊字符的处理,权限问题,或者文件正在使用中无法移动。这些需要在注意事项中提到。 生成的相关问题需要围绕这个功能的扩展,比如处理多层目录、处理重复文件名、添加日志功能、错误处理,或者如何反向操作(将子文件夹中的文件移回父目录)。这些都是用户可能进一步想了解的内容。 最后,确保回答的结构符合用户要求:分步说明两种方法,每种方法包含步骤和代码示例,注意事项,以及相关问题。同时,引用正确的来源,比如引用[1]、[2]、[3]中的不同方法,并在末尾添加引用标识。</think>以下是实现根据文件名自动创建文件夹移动文件的解决方案: ### 一、解决方案步骤 #### 方法1:Windows批处理脚本(BAT) 1. **准备脚本文件** 新建文本文件,粘贴以下代码并保存为`.bat`格式: ```bat @echo off cd /d "%~dp0" for %%a in (*.*) do ( if not "%%~na" == "%~n0" ( if not exist "%%~na\" md "%%~na" move "%%a" "%%~na\" ) ) pause ``` *说明:`%~n0`排除脚本自身文件,`%%~na`提取文件名(不含扩展名)[^2]* 2. **运行脚本** 将`.bat`文件与目标文件放在同一目录,双击运行。 #### 方法2:Python脚本 ```python import os import shutil def organize_files(): current_dir = os.getcwd() for filename in os.listdir(current_dir): if os.path.isfile(filename) and filename != os.path.basename(__file__): # 分离文件名与扩展名 name_part = os.path.splitext(filename)[0] # 创建目标文件夹 target_dir = os.path.join(current_dir, name_part) os.makedirs(target_dir, exist_ok=True) # 移动文件 shutil.move(os.path.join(current_dir, filename), os.path.join(target_dir, filename)) if __name__ == "__main__": organize_files() ``` *说明:使用`os.makedirs`的`exist_ok=True`参数避免重复创建报错[^3]* ### 二、关键逻辑对比 | 功能 | BAT脚本 | Python脚本 | |--------------------|------------------------------------|-------------------------------| | 文件名分割 | 通过`%%~na`直接提取 | 使用`os.path.splitext`方法 | | 扩展名处理 | 自动忽略 | 精确分离主名和扩展名 | | 异常处理 | 无自动错误捕获 | 可添加`try-except`逻辑 | | 跨平台支持 | 仅限Windows | 支持全平台 | ### 三、注意事项 1. 文件名中包含`.`的情况 - BAT脚本会将`报告v1.2.pdf`识别为`报告v1`,建议使用Python脚本处理复杂命名 2. 系统权限问题 需要确保对目标目录有写入权限 3. 文件占用锁定 移动前关闭正在使用的文件 ### 四、进阶优化建议 - 添加日志记录:记录成功/失败操作 - 增加过滤条件:例如只处理`$指定扩展名$`(如`.mp4,.mkv`) - 处理子目录:通过`for /r`或`os.walk()`实现递归操作
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值