You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用路径通配符查找文件?Python os.rename失效的替代方案

解决Python os.rename无法识别通配符路径的问题

Linux下cp "/home/temp/test-*/sample" "./"能通过shell解析通配符找到目标文件,但Python的os.rename不支持自动处理*这类shell通配符——因为通配符解析是shell的专属功能,Python文件操作函数只会直接接收路径字符串,不会自动展开通配符。以下是两种可行的替代方案:

方案一:使用glob模块(推荐)

glob是Python标准库中专门用于路径通配符匹配的模块,能直接解析*等通配符,返回匹配的文件路径列表:

import glob
import os

# 匹配所有符合规则的文件路径
matched_files = glob.glob("/home/temp/test-*/sample")

# 遍历处理匹配到的文件(如果有多个匹配结果,可按需调整逻辑)
for src_path in matched_files:
    # 确认路径是文件而非目录
    if os.path.isfile(src_path):
        # 移动文件到当前目录,目标文件名保留为sample
        os.rename(src_path, "./sample")
        # 若需复制而非移动,改用shutil.copy(src_path, "./sample")

如果确定只会有一个匹配文件,可简化为:

import glob
import os

src_path = glob.glob("/home/temp/test-*/sample")[0]
if os.path.isfile(src_path):
    os.rename(src_path, "./sample")

方案二:调用shell命令

直接通过subprocess模块调用shell执行原有的命令,让shell负责通配符解析:

import subprocess

# 执行移动操作(对应os.rename的功能)
subprocess.run('mv "/home/temp/test-*/sample" "./"', shell=True, check=True)

# 若需执行复制操作,改用cp命令
# subprocess.run('cp "/home/temp/test-*/sample" "./"', shell=True, check=True)

两种方案对比

  • glob模块:纯Python实现,不依赖shell,跨平台性好,能灵活控制匹配结果的处理逻辑,无shell注入风险。
  • subprocess调用shell:代码和原shell命令几乎一致,上手快,但依赖系统shell,若路径包含不可控内容可能存在安全风险,且跨平台兼容性较差。

内容的提问来源于stack exchange,提问作者Lava Sangeetham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:45:30