Python遍历目录文件:按文件名字符串筛选并编辑文件问题求助
解决Python目录文件筛选与编辑问题
嘿,我来帮你搞定这个文件名筛选的问题!看起来你现在的代码已经能处理文件内容替换,但卡在了筛选特定文件名这一步对吧?我给你整理了两种实用方案,直接就能用~
方案1:基础字符串匹配(筛选含特定关键词的文件)
这个方案适合简单的“文件名包含某字符串”的场景,同时支持递归遍历子目录(如果不需要子目录可以调整代码):
import os import datetime as dt # 获取用户输入,新增文件名筛选关键词 target_str = input('Enter the string to filter files: ') OldValue = input('Enter the value to be replaced: ') NewValue = input('Enter the replacement value: ') location = input('Enter path to directory: ') # 遍历目标目录(包括所有子目录) for root, dirs, files in os.walk(location): for file in files: # 核心筛选逻辑:判断文件名是否包含目标字符串 if target_str in file: # 拼接完整文件路径,避免切换目录的混乱 full_file_path = os.path.join(root, file) print(f'Processing file: {full_file_path}') # 读取并修改文件内容 try: # 用utf-8编码打开,避免中文乱码问题 with open(full_file_path, 'r', encoding='utf-8') as f: content = f.read() # 替换指定内容 updated_content = content.replace(OldValue, NewValue) # 写回文件 with open(full_file_path, 'w', encoding='utf-8') as f: f.write(updated_content) print(f'Successfully updated: {full_file_path}') except Exception as e: # 捕获异常,避免程序崩溃 print(f'Failed to process {full_file_path}: {str(e)}')
方案2:正则表达式匹配(更灵活的筛选规则)
如果你需要更复杂的文件名匹配(比如匹配特定后缀、忽略大小写、匹配特定格式的字符串),可以用上你导入的re模块,把筛选逻辑改成这样:
import re # 比如:匹配包含target_str且以.txt结尾的文件,忽略大小写 match_pattern = re.compile(f'.*{target_str}.*\\.txt$', re.IGNORECASE) # 替换原来的if判断为正则匹配 if match_pattern.match(file): # 后续文件处理逻辑和方案1一致
几个关键优化点
- 放弃
os.chdir():切换目录容易导致路径混乱,直接用os.path.join()拼接完整路径更可靠 - 用
os.walk()遍历:自动递归处理所有子目录,不用手动写嵌套循环 - 增加异常处理:防止遇到权限不足、二进制文件等情况导致程序崩溃
- 明确筛选逻辑:专门新增了
target_str输入项,用来指定文件名要包含的字符串
内容的提问来源于stack exchange,提问作者Jim Herbert
相关产品推荐
相关产品推荐

