我有一個包含特定擴展名文件的文件夾,例如:'LRZ_OA_12115.txt'。我有數百個這些名字的文件。以下是任務: i)我想以數字順序訪問每個這些文件。例如,我希望在LRZ_OA_12116之前有LRZ_OA_12115。 ii)我想訪問並閱讀這個部分:文件夾中每個文件的12115(不是字母)。通讀文件夾中的文件
我會很感激任何答案。
謝謝。
我有一個包含特定擴展名文件的文件夾,例如:'LRZ_OA_12115.txt'。我有數百個這些名字的文件。以下是任務: i)我想以數字順序訪問每個這些文件。例如,我希望在LRZ_OA_12116之前有LRZ_OA_12115。 ii)我想訪問並閱讀這個部分:文件夾中每個文件的12115(不是字母)。通讀文件夾中的文件
我會很感激任何答案。
謝謝。
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):
...
這不會排序數字。 –
這樣做:
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]))
按照修改時間排序,而不是按名稱排序... –
'name [4:-4]'看起來不對。 –
'>>>「12345678.txt」[4:-4] '5678'' –
我的建議:
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))
它按目錄排序目錄列表名稱部分的數值(不帶擴展名),檢查這部分是數字,以避免在轉換爲整數時出現異常(其他名稱 - 如果有的話 - 在開始時留下,並且未排序)
你有什麼嘗試到目前爲止? – CodeCupboard
使用'lambda x:int(os.path.splitext(x)[0])'作爲鍵進行排序。但是你必須檢查文件名是否都是數字,否則你會得到一個異常。 –
12115 12116之前不是數字順序,它是字母順序。你需要在10之前2對嗎? –