从Python3中的字符串中删除尾部扩展名



我有下面的python脚本来迭代所有以"mkv"结尾的文件,并打印相同的字符串,但末尾不带"mkv"。

但是,相反,它打印原始文件名,包括"mkv",为什么??

files=os.system('find /media/radamand/230_GB -name *mkv')
for file in str(files):
converted_filename=file[0:-3]
print(converted_filename)

您的os.system调用执行find命令,将其输出发送到解释器标准输出流(这就是为什么您看到匹配的文件,包括末尾的"mkv",因为此输出是而不是打印函数在后续代码中的结果(,然后简单地返回退出代码

所以files变量实际上得到了整数0的赋值。

然后,您的for循环将files从int强制转换为字符串("0"(,因此,您的for循环现在实际上意味着:";循环通过串CCD_ 3"的每个字符;(但是只有一个(,在这种情况下,由于在只有一个字符的字符串上对[:-3]进行了切片,因此它的计算结果为空字符串,并将其传递给打印函数。

所以,操作系统并不是为你想要实现的目标而设计的。

如果您正在搜索的父文件夹中可能有其他文件夹,也可能有您正在查找的文件名,那么我建议使用glob模块。

import glob    
files = glob.glob("/media/radamand/230_GB/*mkv")  # Returns a list of strings for matched files
for file in files:
print(file[:-3])

如果需要,可以添加和设置关键字参数recursive和/或include_hiddenTrue

但是,如果您只在当前文件夹中查找文件,则可以使用fnmatch:

import fnmatch
import os
for file in os.listdir("/media/radamand/230_GB"):
if fnmatch.fnmatch(file, "*mkv"):
print(file[:-3])

相关内容

最新更新