2017-07-22 36 views
0

我已經試過這樣:如何讓python列出目錄中的所有文件擴展名?

ListFiles = list(os.walk(os.getcwd())) 
SplitTypes = [] 

for i in range (0 , len(ListFiles)): 
SplitTypes.extend(ListFiles[i].rsplit(".") [1]) 

print(SplitTypes) 

,但我得到的結果是這樣的:

['p', 'y', 't', 'x', 't', '3', '2', ' ', 'p', 'm', '4', '0', '1', '2', '2', '4', '1', '4', 's', 'k', 'p', 'm', 'p', '4'] 

該數字是因爲截圖我曾在該目錄中,時間被」分離的。 「並且它們被分開。

我想要的結果顯示:

['py', 'txt', 'skp', 'png'] 

或類似的東西。

並且此文件名'Screen Shot 2017-05-24 at 11.24.33 am.png'應該只顯示png位。 在此之後,我將使用set()刪除重複項。

回答

1

這可以這樣做:

import os 

ListFiles = os.walk(os.getcwd()) 
SplitTypes = [] 
for walk_output in ListFiles: 
    for file_name in walk_output[-1]: 
     SplitTypes.append(file_name.split(".")[-1]) 

print(SplitTypes) 

os.walk給出作爲3元組元素,當中的最後一個元素是一個文件名列表輸出。因此,我們需要遍歷os.walk的輸出,它將爲當前目錄中的文件提供一個元組,併爲每個子目錄中的文件提供一個附加元組。然後我們需要得到每個元組的最後一個元素,這會給我們列出文件名。然後,我們將使用.迭代文件名split,並提取擴展名,該擴展名是使用split剛剛生成的列表的最後一個元素。我們可以通過使用-1進行下標來提取Python中任何序列的最後一個元素。最後,我們將提取的擴展名追加到SplitTypes

如果你有你的文件夾中沒有其他文件夾,那麼你的問題可以很容易地解決:

import os 

SplitTypes=[] 
for file in os.listdir(os.curdir): 
    SplitTypes.append(file.split('.')[-1]) 
print(SplitTypes) 

os.listdir(path)只給出路徑目錄中的文件名。

+0

如果沒有文件夾,此代碼將工作,在第一個中,我得到的結果與原始代碼中的第一個結果沒有多大區別,唯一的區別是它只給出了最後一個字母表。例如。 txt變成't',py變成'y'。除了有文件夾時,第二個代碼運行良好。 os.listdir(路徑)列出了文件夾,而不僅僅是文件名(因爲我使用的是mac,所以可能是原因) – Addie

+0

是的,正如答案中所提到的,第二個代碼片段只在沒有其他代碼時才起作用文件夾。我再次測試了我的第一個代碼片段,它在我的Ubuntu機器上運行良好。我快速瀏覽了文檔,並且找不到任何指向Ubuntu和Mac上行爲差異的任何事情。可能,我忽略了一些東西。 –

+0

但我對Mac OS根本不熟悉。你能從循環內打印出walk_output變量,並在這裏輸出一些示例文件夾的輸出。這將幫助我找到問題。 –

相關問題