2015-07-04 175 views
2

在名为“export”的文件夹中有一个mkv文件。我想要做的是制作一个python脚本,从该导出文件夹中提取文件名。 假设文件夹位于“C:\Users\UserName\Desktop\New_folder\export”。如何使用python获取目录中文件的名称

我该如何取名?

我试过用这个os.path.basenameos.path.splitext ..好..没有像我想象的那样工作。

+1

为什么'os.path.basename'没有工作?你能否展示一个不起作用的示例代码? –

+0

你可以粘贴你的代码吗? – PetarP

回答

5

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坎宁安提到的一个更Python的方式来处理文件名,你可以使用glob模块:

map(path.basename,glob.iglob(pth+"*.mkv")) 
+0

thanx ..工作就像一个魅力.. :) thanx一吨:) – Xonshiz

+0

如果你打算使用os.listdir,'如果f.endswith(“。mkv”)'就足够了 –

+0

@PadraicCunningham是啊有一些这个任务的方式,但你可以在https://docs.python.org/2/library/fnmatch.html中看到,也因为它使用Unix shell风格的通配符,我认为它比其他方式更pythonic和更快!你怎么看? – Kasramvd

1

我假定你基本上询问如何在给定的目录中列出的文件。你想要的是:

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 
+0

ohh ..谢谢.. :) – Xonshiz

1

您可以使用glob

from glob import glob 

pth ="C:/Users/UserName/Desktop/New_folder/export/" 
print(glob(pth+"*.mkv")) 

path+"*.mkv"将匹配所有以.mkv结尾的文件。

先手,你可以使用地图或列表补偿与iglob的基本名称:

from glob import iglob 

print(list(map(path.basename,iglob(pth+"*.mkv")))) 


print([path.basename(f) for f in iglob(pth+"*.mkv")]) 

iglob返回一个迭代器,这样你就不会建立任何理由的清单。

相关问题