Python隨手記(二) 獲取目錄資訊•改
阿新 • • 發佈:2019-02-11
之前已經完成獲取目錄資訊的基本功能,但在內容比較多的目錄下執行結果如圖1。一個字形容就是“亂”,效果很不好,需要改進。
圖1 原始版顯示效果
首先感覺時間格式怪怪的,而且星期之類的也沒有必要顯示,所以從這裡下手。查詢手冊(Python v3.2.3--15.3)找到兩個有用的函式,一個是time.strftime(),一個是time.localtime ()[1],分別可以格式化時間,轉換秒數為當前時間。如想讓時間按照“2012.09.13-19:40:03”格式顯示,查詢格式字串表,可知對應的格式化字串是“%Y.%m.%d-%H:%M:%S”。另外,time.ctime()轉換時間是按照標準時間轉換的,要使用本地時間需要使用另外一個函式time.localtime()。最終存入字典的語句類似
time.strftime('%Y.%m.%d-%H:%M:%S',time.localtime(tempInfo.st_ctime)))
時間格式改完之後就要調整下輸出格式,讓各項對齊並按順序排列。這裡使用的方法是固定每一項內容的字元數,從而保證每列整齊。不過在顯示檔名時有個問題,有的檔名很長,當其長度超過格式字串指定值時,print函式會按原長度顯示,忽略指定值,造成格式混亂。因此,在顯示檔名前,使用len函式檢測其長度,如果超出範圍則將多餘部分用‘…’代替。在Python中擷取字串很簡單,直接標註範圍就可以,類似[0:17]。
最後,由於字典裡的資料時無序的,需要用sorted()函式將字典排序,按照檔名的字母順序顯示記錄,這樣比較整齊。
最終程式碼如下:
importos importtime importstruct defGetCurPathInfo(): CurPath = os.getcwd() ChildrenList = os.listdir(CurPath) InfoDict = dict() for Name in ChildrenList: tempInfo = os.stat(Name) tempDict = dict([\ ('Size',tempInfo.st_size),\ ('CreateTime',time.strftime('%Y.%m.%d-%H:%M:%S',time.localtime(tempInfo.st_ctime))),\ ('ModifyTime',time.strftime('%Y.%m.%d-%H:%M:%S',time.localtime(tempInfo.st_mtime)))\ ]) InfoDict[Name] = tempDict NameOrder = sorted(InfoDict.items()) print('='*80) print('%-20s%10s KB %19s %19s' %('Name', 'Size', 'ModifyTime', 'CreateTime')) print('-'*80) for Record in NameOrder: if len(Record[0])>20: ShowName = Record[0][0:17] + '...' else: ShowName = Record[0] info = '%-20s%10.2f KB %19s || %19s' %(ShowName,Record[1]['Size']/1024,\ Record[1]['ModifyTime'],Record[1]['CreateTime']) print(info) deftest(): GetCurPathInfo() input() if__name__ == '__main__': test()
顯示效果如圖2:
圖2 改進版顯示效果
【附】時間轉換的簡要說明:
【附】time.strftime格式字串部分說明: