如何获取python目录中的文件名列表(没有扩展名)?

问题描述:

假设我的文件夹结构是如何获取python目录中的文件名列表(没有扩展名)?

+Data 
    -abc.jpg 
    -db.jpg 
    -ap.jpg 

输入为 '路径/到/数据'

预期输出为[ 'ABC', 'DB', 'AP']

只见许多类似的问题,但没有得到什么我想要的。 我更喜欢在python中使用os模块。

+0

的[我如何列出一个目录下的所有文件?]可能的复制(https://开头计算器.com/questions/3207219/how-do-i-list-all-files-of-a-directory) –

+0

为了解压文件名,看看这里:[在Python中提取文件名的扩展名](https://*.com/questions/541390/extracting-extension-from-filename-in-python) –

+0

看看os .walk() –

import os  
files_no_ext = [".".join(f.split(".")[:-1]) for f in os.listdir() if os.path.isfile(f)] 
print(files_no_ext) 
+1

['os.listdir'](https://docs.python.org/3.6/library/os.html#os.listdir)在目录和文件之间没有区别,所以你的列表将会有(大部分为空)的子目录条目。 –

+0

@ChristianKönig谢谢,修正 – Keatinge

+0

你还可以用''os.path.splitext(f)[0]'](https://docs.python.org/3.6/library/os)交换你的'join/split'。 path.html#os.path.splitext),它负责处理一些特殊情况(基本名称中的前导句点)。 –

您可以使用os.listdir内搭路径作为参数和返回文件和它目录的列表。
>>> list_ = os.listdir("path/to/Data")
>>> list_
>>> ['abc.jpg', 'dn.jpg', 'ap.jpg']

通过这个清单,你只需要做哪些分割每个元素的理解列表“” (点),除了最后一个元素的所有元素都加上''。 (点)并检查元素是否是使用os.path.file()的文件。

>>> list_ = ['.'.join(x.split('.')[:-1]) for x in os.listdir("path/to/Data") if os.path.isfile(os.path.join('path/to/Data', x))]
>>> list_
>>> ['abc', 'dn', 'ap']

import os 
    from os import listdir 
    from os.path import isfile, join 
    def filesMinusExtension(path): 
     # os.path.splitext(f)[0] map with filename without extension with checking if file exists. 
     files = [os.path.splitext(f)[0] for f in listdir(path) if isfile(join(path, f))]; 
     return files; 
+0

你的代码有一些问题... 但是,有什么麻烦的是:分号?你在Python家伙,只是扔掉它们! – Darkaird

+0

感谢您的反馈。是的,Java背景有时会影响我的分号的分号。无论如何,你能分享这个代码可能会出现什么问题吗? – grimur82

+0

除了分号,为什么不输入os.path.splittext来导入isfile并以这种方式加入? 此外,您使用理解列表进行过滤(右侧的“if”),但不能进行映射。 如果是isfile(join(path,f))]'',你只需要在listdir(路径)中为f写[os.path.splitext(f)[0])。 – Darkaird

简单,

l=os.listdir('path') 
li=[x.split('.')[0] for x in l] 

import os 
filenames=next(os.walk(os.getcwd()))[2] 
efn=[f.split('.')[0] for f in filenames] 

os.getcwd() #for get current directory path