編程實現如下功能並進行最大化的優化:遍歷指定目錄下的全部文件,找出其中佔用空間最大的前3個文件。 html
#!/usr/bin/env python #-*- coding: utf-8 -*- '''selectbiggestfile.py @note: 使用os.stat獲取相關信息,os.walk遍歷, @see: help(os) @authoer: U{119<mailto:119@gmail.com>} @version: $id$ ''' import sys import os def get_top_three(path): '''獲取給定路徑中文件大小最大的三個 @param path: 指定路徑 @return 返回一個list,每項爲(size, filename) ''' all_file = {} for root, dirs, files in os.walk(path): #遍歷path for onefile in files: fname = os.path.join(root, onefile) #得到當前處理文件的完整名字 #print 'fname is %s' %fname fsize = os.stat(fname).st_size #得到當前處理文件大小 #print 'all_file is %s' %all_file if all_file.has_key(fsize): #按照文件大小存儲 all_file[fsize].append(fname) else: all_file[fsize] = [fname] fsize_key = all_file.keys() #獲得全部的文件大小 print 'fsize_key is %s\n' %fsize_key fsize_key.sort() #排序,從小到大 print 'fsize_key is %s\n' %fsize_key result = [] for i in [-1, -2, -3]: #依次取最大的三個 print 'all_file[fsize_key[i]] is %s\n' %all_file[fsize_key[i]] print 'fsize_key[i] is %s\n' %fsize_key[i] for j in all_file[fsize_key[i]]: #保存 result.append((fsize_key[i], j)) print 'result is %s\n' %result return result[:3] #返回前三個 if __name__ == "__main__": if len(sys.argv) == 1: print 'usage:\n\tpython selectbiggestfile.py path' else: print 'sys.argv is %s\n' %sys.argv abs_path = os.path.abspath(sys.argv[1]) #獲得絕對路徑 print 'abs_path is %s\n' %abs_path if not os.path.isdir(abs_path): #判斷所給的路徑是否存在 print '%s is not exist' %abs_path else: top = get_top_three(abs_path) print 'top is %s\n' %top for (s, f) in top: print '%s\t -> \t%s' %(f,s)
運行截屏: python
利用ConfigParser,將上述題目中產生的結果按照cdays+1-my.ini格式存儲到文件cdays+1-result.txt中。 shell
cdays+1-my.ini內容爲: 編程
[Number] filesize = somefilesize filename = somefilename
源代碼
#!/usr/bin/env python #-*- coding: utf-8 -*- import os import sys from ConfigParser import RawConfigParser from selectbiggestfile import get_top_three '''parseresult.py @note: 利用ConfigParser解析ini格式 @see: 文檔參見http://pydoc.org/2.4.1/ConfigParser.html, 其餘例子http://effbot.org/librarybook/configparser-example-1.py @authoer: U{119<mailto:119@gmail.com>} @version: $id$ ''' def iniTT(size_file): '''按照.ini的格式,存儲size_file ''' cfg = RawConfigParser() print size_file index = 1 for (s, f) in size_file: cfg.add_section("%d" %index) cfg.set("%d" %index, 'Filename', f) cfg.set('%d' %index, 'FileSize', s) index += 1 cfg.write(open('parseresult.txt','w')) if __name__ == '__main__': if len(sys.argv) == 1: print 'usage:\n\tpython parseresult.py path' else: abs_path = os.path.abspath(sys.argv[1]) if not os.path.isdir(abs_path): print '%s is not exist' % abs_path else: iniTT(get_top_three(abs_path))
運行結果 app
parseresult.txt以下: 優化