Python3去除字符串末尾扩展名:MKV遍历脚本未生效原因咨询
问题原因与修复方法
核心错误
你完全用错了os.system()——这个函数不会返回命令的输出内容,它只返回命令的退出状态码(成功返回0,失败返回非0值)。所以你的files变量根本不是文件列表,而是个数字(比如0),转成字符串后是"0",循环遍历的是这个字符串的单个字符,和你要处理的文件完全无关。
另外你看到的带mkv后缀的输出,其实是find命令本身直接打印到终端的,不是你脚本里print语句的输出,你把两者搞混了。
还有两个次要问题:
find命令里的*mkv没加引号,shell会先把当前目录下的mkv文件替换这个通配符,而非让find去匹配目标路径下的文件- 用
file[0:-3]截取后缀很不严谨,遇到文件名带"mkv"字符的情况会出错
修复方案
推荐两种靠谱的写法:
方案1:用subprocess正确获取命令输出
import subprocess # 获取find命令的输出,给*.mkv加引号避免shell解析问题 output = subprocess.check_output('find /media/radamand/230_GB -name "*.mkv"', shell=True, text=True) # 按换行分割成文件路径列表 file_paths = output.strip().split('\n') for path in file_paths: # 从末尾分割一次去掉.mkv后缀,更安全 filename_without_ext = path.rsplit('.mkv', 1)[0] print(filename_without_ext)
方案2:纯Python实现(更推荐,无需依赖shell)
from pathlib import Path target_dir = Path('/media/radamand/230_GB') # 递归遍历所有.mkv文件 for mkv_file in target_dir.rglob('*.mkv'): # 直接获取不带后缀的文件名 print(mkv_file.stem)
内容的提问来源于stack exchange,提问作者Radamand
相关产品推荐
相关产品推荐

