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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:25:26