我有下面的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_hidden
到True
。
但是,如果您只在当前文件夹中查找文件,则可以使用fnmatch:
import fnmatch
import os
for file in os.listdir("/media/radamand/230_GB"):
if fnmatch.fnmatch(file, "*mkv"):
print(file[:-3])