我有一個目錄中有90K文件。這是如此巨大數量的文件,像ls
這樣的bash函數失敗。所以當然,從我的Python(Mac Python,版本2.5)腳本os.listdir()
;它失敗OSError: [Errno 12] Cannot allocate memory: '.'
解決OSError與os.listdir
人們會說:「不要把這麼多文件放在一個目錄中!你瘋了嗎?」 - 但我喜歡假裝我生活在未來,一個輝煌燦爛的地方,在那裏我擁有十億字節的內存,並且不需要過多擔心我的文件到底在哪裏,只要有我的旋轉盤片上留有鏽跡。
那麼,對於os.listdir()
這個問題,有沒有很好的解決方法?我已經考慮過僅僅支持find
,但這有點嚴重,不幸的是find
是遞歸的,在Mac OS X 10.6上沒有支持maxdepth選項。
這裏是通過脫殼而出找的樣子,大致os.listdir:
def ls(directory):
import os
files = os.popen4('find %s' % directory)[1].read().rstrip().split('\n')
files.remove(directory)
return files # probably want to remove dir prefix from everything in here too
更新:os.listdir()
成功在Python 2.6。
你得到的錯誤是什麼?我經常使用'os.listdir'來獲取包含50-100k文件的目錄列表。 'os.listdir'也是最快的選擇,因爲它不會對目錄中的每個文件進行「統計」。 – Seth 2010-11-04 16:32:45
@Seth,我得到OSError:[Errno 12]無法分配內存:'。' – 2010-11-04 16:34:21
這個目錄中大概有多少個文件? – 2010-11-04 16:43:23