用python查找指定格式或名称的文件及修改指定文件夹名称

本文提供了一个使用Python实现的文件和文件夹搜索工具。该工具能够递归地搜索指定目录下的特定文件夹并重命名,同时还能查找指定格式的文件。代码包括两个主要功能:搜索并重命名文件夹以及按模式查找文件。

写这个也是为了能更好的学习python,大家有什么意见可以提出来,这个代码直接放到编译器中运行即可。

#-*- coding: GBK -*-
import os, sys, re

newdir = ""

#递归搜索函数
def search(rootdir,searchdirname):
    if os.path.isdir(rootdir):
        #print rootdir
        #分离路径和文件夹
        split1 = os.path.split(rootdir)
        #print split1[1]

        #判断是否为指定的文件夹
        if split1[1] == searchdirname:
            print "找到文件夹:%s" % (rootdir)
            try:
                #将文件夹名称改为新的文件夹名称
                os.rename(rootdir,split1[0]+"\\"+newdir)
                print "文件夹 [%s] 已改名为 [%s]" % (rootdir,newdir)
            except:
                pass

        #遍历指定文件夹下的内容(文件和文件夹列表)
        listnew = os.listdir(rootdir)

        for l1 in listnew:
            path = rootdir + "\\" + l1
            #递归调用
            search(path,searchdirname)
    else:
        #print '不是文件夹:%s' % (rootdir)
        return
    
#搜索指定格式的文件    
def find_file_by_pattern(pattern,base):   
    '''''查找给定文件夹下面所有 '''  
    re_file = re.compile(pattern)   
    if base == ".":   
        base = os.getcwd()   
           
    final_file_list = []   
    #print base   
    cur_list = os.listdir(base)   
    for item in cur_list:   
        print item
        full_path = os.path.join(base, item)   
        if full_path.endswith(pattern):#不能写成单引号,单引号达不到预期的效果
        # print full_path   
            #bfile = os.path.isfile(item)
            if os.path.isfile(full_path):
               if re_file.search(full_path):
                   print re_file.search(full_path).group()
                   final_file_list.append(full_path)   
            else:   
               final_file_list += find_file_by_pattern(pattern,full_path)
        #for filename in re_file.findall(final_file_list):
           # print filename
        else:
            continue
    return final_file_list

def serchDir(startdir,dirname):
    search(startdir,dirname)
    
if __name__ == '__main__':
    root=raw_input("输入搜索目录:")
    key=raw_input("输入待搜索的文件夹名称:")
    #newdir = raw_input("文件夹改名为:")
    #serchDir(root,key)
    base="".join([root,key])
    fileName=raw_input("请输入要查找的文件名称或后缀名:")
    for result in find_file_by_pattern(fileName,base):
        print result

 

 如果要查找指定名字的文件只需要将以下代码屏幕即可

if full_path.endswith(pattern):#不能写成单引号,单引号达不到预期的效果
......
......
......
else:
            continue

 

将这三行屏幕后就可以用文件名进行搜索了。

<think> 我们参考用户提供的引用内容,特别是引用[3]和引用[4]中的方法,来编写一个遍历文件夹并获取指定文件名称匹配指定模式)的文件路径的Python脚本。 用户需求:遍历文件夹并获取指定文件名称文件路径。 我们可以采用两种常见方法: 方法1:使用os.walk()递归遍历目录(如引用[2]和[4]) 方法2:使用递归函数配合os.listdir()(如引用[3]) 这里我们提供两种实现方式,并说明其特点。 方式一:使用os.walk(推荐,简单且高效) 方式二:使用递归函数(自定义递归,可控性强) 我们将分别编写两个函数,并给出示例。 注意:用户要求的是“指定文件名称”,可以理解为精确匹配文件名,也可以是包含部分名称(模糊匹配)使用通配符(此时建议用glob模块)。但根据问题描述,我们主要实现精确匹配和部分匹配(即文件名包含指定字符串)。 我们提供两种匹配方式: 1. 精确匹配:文件名完全等于给定字符串 2. 模糊匹配:文件名包含给定字符串 另外,也可以使用通配符匹配,但这里我们先用字符串匹配实现。如果需要使用通配符,可以使用fnmatch模块。 以下我们分别实现: 方式一:使用os.walk 方式二:使用递归(基于os.listdir) 我们假设用户可能需要的功能: - 可以指定根目录 - 可以指定查找文件名(可以是完整文件名,也可以是部分文件名) - 返回所有匹配文件的完整路径列表 我们将编写一个函数,它接受两个参数:root_dir(要遍历的根目录)和file_name_pattern(要匹配的文件名模式,可以是完整文件部分文件名)。同时,我们可以通过一个参数match_type来指定匹配方式('exact'表示精确匹配,'fuzzy'表示模糊匹配,默认使用模糊匹配)。另外,我们也可以支持使用通配符,但这里先不展开。 注意:引用[4]中使用了os.walk,并且通过endswith判断后缀,我们可以扩展这种判断。 我们先实现方式一(os.walk): </think> 以下是使用Python遍历文件夹并获取指定文件路径的完整解决方案,结合了引用[2][3][4]中的最佳实践: ### 解决方案代码 ```python import os import fnmatch # 用于文件名模式匹配 def find_files_by_name(root_dir, target_name): """ 在指定目录下递归查找包含特定名称文件 参数: root_dir: 要搜索的根目录路径 target_name: 要查找文件名(支持通配符*) 返回: 匹配文件的完整路径列表 """ matched_files = [] # 遍历目录树(使用os.walk高效递归) for foldername, subfolders, filenames in os.walk(root_dir): for filename in filenames: # 使用fnmatch进行模式匹配(支持*通配符) if fnmatch.fnmatch(filename, target_name): # 构建完整文件路径 full_path = os.path.join(foldername, filename) matched_files.append(full_path) return matched_files # 使用示例 if __name__ == "__main__": # 要搜索的目录(替换为你的实际路径) search_directory = "./项目文件" # 要查找文件名(支持*通配符) file_pattern = "*report*.txt" # 示例:查找包含"report"的txt文件 # 执行搜索 found_files = find_files_by_name(search_directory, file_pattern) # 输出结果 if found_files: print(f"找到 {len(found_files)} 个匹配文件:") for i, file_path in enumerate(found_files, 1): print(f"{i}. {file_path}") else: print("未找到匹配文件") ``` ### 关键功能说明 1. **递归遍历目录**: - 使用`os.walk()`高效遍历所有子目录[^2][^3] - 自动处理嵌套文件夹结构 2. **灵活文件名匹配**: - 支持精确匹配:`"report.txt"` - 支持通配符匹配: - `"*.xlsx"` → 所有Excel文件 - `"data_*.csv"` → 以"data_"开头的CSV文件 - `"*final*.*"` → 包含"final"的任何扩展名文件 3. **路径处理**: - 使用`os.path.join()`构建跨平台兼容路径[^3] - 返回完整绝对路径(如`C:\项目文件\Q3\财务报告.txt`) ### 使用示例 假设目录结构: ``` 项目文件/ ├── Q1/ │ ├── sales_report.txt │ └── expenses.xlsx ├── Q2/ │ └── 中期报告.pdf └── Q3/ ├── 财务报告.txt └── 最终报告.docx ``` 不同搜索参数的结果: 1. `file_pattern = "*报告*"` → ``` ./项目文件/Q2/中期报告.pdf ./项目文件/Q3/财务报告.txt ./项目文件/Q3/最终报告.docx ``` 2. `file_pattern = "*.txt"` → ``` ./项目文件/Q1/sales_report.txt ./项目文件/Q3/财务报告.txt ``` ### 高级用法 1. **多条件搜索**: ```python # 同时查找PDF和DOCX文件 found_files = find_files_by_name(search_directory, "*.pdf") found_files += find_files_by_name(search_directory, "*.docx") ``` 2. **大小写敏感处理**: ```python # 修改匹配行(添加大小写转换) if target_name.lower() in filename.lower(): ``` 3. **结果排序**: ```python # 按文件名排序 found_files.sort(key=lambda x: os.path.basename(x)) ``` 此方案结合了`os.walk`的高效遍历和`fnmatch`的灵活匹配,适合处理大型目录结构[^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值