2017-07-28 97 views
0

假設我的文件夾結構是如何獲取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://stackoverflow.com/questions/541390/extracting-extension-from-filename-in-python) –

+0

看看os .walk() –

回答

3
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),它負責處理一些特殊情況(基本名稱中的前導句點)。 –

1

您可以使用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']

0
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

2

簡單,

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

os.getcwd() #for get current directory path 
相關問題