名为" export
"的文件夹中有一个mkv文件。我想要做的是创建一个python脚本,从该导出文件夹中提取文件名。
我们假设文件夹位于" C:\Users\UserName\Desktop\New_folder\export
"。
如何获取名称?
我尝试使用此os.path.basename
和os.path.splitext
..好吧..没有像我预期的那样解决问题。
答案 0 :(得分:7)
os.path
在路径名上实现了一些有用的功能。但它无法访问路径的内容。为此,您可以使用os.listdir
。
以下命令将为您提供给定路径的内容列表:
os.listdir("C:\Users\UserName\Desktop\New_folder\export")
现在,如果您只想要.mkv
个文件,可以使用fnmatch
(此模块支持Unix shell样式通配符)模块来获取您期望的文件名:
import fnmatch
import os
print([f for f in os.listdir("C:\Users\UserName\Desktop\New_folder\export") if fnmatch.fnmatch(f, '*.mkv')])
另外,正如@Padraic Cunningham提到的处理文件名更加pythonic的方式,你可以使用glob
模块:
map(path.basename,glob.iglob(pth+"*.mkv"))
答案 1 :(得分:2)
我假设您基本上是在询问如何列出给定目录中的文件。你想要的是:
import os
print os.listdir("""C:\Users\UserName\Desktop\New_folder\export""")
如果有多个文件并且你想要一个有.mkv结尾的文件你可以这样做:
import os
files = os.listdir("""C:\Users\UserName\Desktop\New_folder\export""")
mkv_files = [_ for _ in files if _[-4:] == ".mkv"]
print mkv_files
答案 2 :(得分:2)
您可以使用glob:
from glob import glob
pth ="C:/Users/UserName/Desktop/New_folder/export/"
print(glob(pth+"*.mkv"))
path+"*.mkv"
将匹配以.mkv
结尾的所有文件。
要获得基本名称,您可以使用map或列表comp与iglob:
from glob import iglob
print(list(map(path.basename,iglob(pth+"*.mkv"))))
print([path.basename(f) for f in iglob(pth+"*.mkv")])
iglob会返回一个迭代器,因此您无需无理由构建列表。
答案 3 :(得分:2)
如果您正在搜索递归文件夹搜索,此方法将帮助您使用os.walk
获取文件名,您也可以使用以下代码获取这些文件的路径和目录。
import os, fnmatch
for path, dirs, files in os.walk(os.path.abspath(r"C:/Users/UserName/Desktop/New_folder/export/")):
for filename in fnmatch.filter(files, "*.mkv"):
print(filename)
答案 4 :(得分:1)
您可以使用glob
import glob
for file in glob.glob('C:\Users\UserName\Desktop\New_folder\export\*.mkv'):
print(str(file).split('\')[-1])
这将列出所有扩展名为.mkv的文件
file.mkv, file2.mkv
,依此类推。
答案 5 :(得分:0)
在 os.walk 中,您可以将文件路径作为列表读取
files = [ file_path for _, _, file_path in os.walk(DIRECTORY_PATH)]
for file_name in files[0]: #note that it has list of lists
print(file_name)