2017-04-09 44 views
-1

我有一個包含特定擴展名文件的文件夾,例如:'LRZ_OA_12115.txt'。我有數百個這些名字的文件。以下是任務: i)我想以數字順序訪問每個這些文件。例如,我希望在LRZ_OA_12116之前有LRZ_OA_12115。 ii)我想訪問並閱讀這個部分:文件夾中每個文件的12115(不是字母)。通讀文件夾中的文件

我會很感激任何答案。

謝謝。

+0

你有什麼嘗試到目前爲止? – CodeCupboard

+0

使用'lambda x:int(os.path.splitext(x)[0])'作爲鍵進行排序。但是你必須檢查文件名是否都是數字,否則你會得到一個異常。 –

+0

12115 12116之前不是數字順序,它是字母順序。你需要在10之前2對嗎? –

回答

0

您可以使用Python標準庫中的osos.path函數。

for filename in sorted(os.listdir('<your-directory>')): 
    name, _ = os.path.splitext(filename) 
    # do something with name 

作爲讓弗朗索瓦法布爾注意到,這給lexicographic order(12115 12116之前,但2 10之前),而不是嚴格的數字順序。如果您需要後者,然後修改這樣的代碼:

sort_key = lambda x: int(os.path.splitext(x)[0]) if os.path.splitext(x)[0].isdigit() else 0 
for filename in sorted(os.listdir('<your-directory>'), key=sort_key): 
    ... 
+0

這不會排序數字。 –

1

這樣做:

import os, glob 
files = sorted(glob.glob(path + '*.txt'), key=os.path.basename) 

對於數字,你可以這樣做:

files = sorted(glob.glob('*.txt'), key=lambda name: int(os.path.splitext(name)[0])) 
+0

按照修改時間排序,而不是按名稱排序... –

+1

'name [4:-4]'看起來不對。 –

+0

'>>>「12345678.txt」[4:-4] '5678'' –

1

我的建議:

import os 
the_dir = "/path/to/your/files" 

print(sorted(os.listdir(the_dir),key = lambda x: int(os.path.splitext(x)[0]) if os.path.splitext(x)[0].isdigit() else 0)) 

它按目錄排序目錄列表名稱部分的數值(不帶擴展名),檢查這部分是數字,以避免在轉換爲整數時出現異常(其他名稱 - 如果有的話 - 在開始時留下,並且未排序)

相關問題