今天繼續(xù)整理原來寫的 python 代碼,下面是獲取文件信息的 python 處理代碼。 獲取指定目錄下文件的文件名以及文件的數(shù)量,然后列出其中還存在的目錄名稱: #!/usr/bin/env python2 #-*-encoding:utf-8-*-
import os,sys def listdir(dir,file): file.write(dir + '\n') fielnum = 0 list = os.listdir(dir) #列出目錄下的所有文件和目錄 for line in list: filepath = os.path.join(dir,line) if os.path.isdir(filepath): #如果filepath是目錄,則再列出該目錄下的所有文件 myfile.write(' ' + line + '//'+'\n') for li in os.listdir(filepath): myfile.write(' '+li + '\n') fielnum = fielnum + 1 elif os.path: #如果filepath是文件,直接列出文件名 myfile.write(' '+line + '\n') fielnum = fielnum + 1 myfile.write('all the file num is '+ str(fielnum)) dir = raw_input('please input the path:') myfile = open('list.txt','w') listdir(dir,myfile) myfile.close()
獲取的文件名、目錄信息會在當(dāng)前路徑下生成 list.txt 的文件。文件內(nèi)容如下: G:\codes\python\file_info list.txt list2.txt list_filenames.py list_filenames2.py list_files+.py test// g.txt mmm.pptx test2// list.txt test3 all the file num is 9
下面是上面程序的升級版本,遍歷了當(dāng)前目錄下的文件夾,繼續(xù)執(zhí)行遍歷文件名的命令。 #!/usr/bin/env python2 #-*-encoding:utf-8-*-
"""os.walk(path),遍歷path,返回一個對象, 他的每個部分都是一個三元組, ('目錄x',[目錄x下的目錄list],目錄x下面的文件)"""
import os def walk_dir(dir,fileinfo,topdown=True): for root, dirs, files in os.walk(dir, topdown): for name in files: print(os.path.join(name)) fileinfo.write(os.path.join(root,name) + '\n') for name in dirs: print(os.path.join(name)) fileinfo.write(' ' + os.path.join(root,name) + '\n') dir = raw_input('please input the path:') dir = r'G:\codes\python\file_info' fileinfo = open('list2.txt','w') walk_dir(dir,fileinfo) fileinfo.close()
shell 打印出來的結(jié)果是: >>> ================================ RESTART ================================ >>> please input the path:G:\codes\python\file_info list.txt list2.txt list_filenames.py list_filenames2.py list_files+.py test test2 g.txt mmm.pptx list.txt test3 234.txt
執(zhí)行文件目錄中 list2.txt 中的內(nèi)容是: G:\codes\python\file_info\list.txt G:\codes\python\file_info\list2.txt G:\codes\python\file_info\list_filenames.py G:\codes\python\file_info\list_filenames2.py G:\codes\python\file_info\list_files+.py G:\codes\python\file_info\test G:\codes\python\file_info\test2 G:\codes\python\file_info\test\g.txt G:\codes\python\file_info\test\mmm.pptx G:\codes\python\file_info\test2\list.txt G:\codes\python\file_info\test2\test3 G:\codes\python\file_info\test2\test3\234.txt
是目錄的地方行首空了一定的位置。
下面是另外一個增強(qiáng)版本,主要實現(xiàn)了遍歷給定目錄下所有文件,并計算所有文件的 MD5 值,然后將文件 MD5 值和文件名保存在目錄下的 list3.txt 文件中,代碼如下: #!/usr/bin/env python2 #-*-encoding:utf-8-*-
import os import sys import md5
def walk_dir(dir,fileinfo,topdown=True): for root, dirs, files in os.walk(dir, topdown): for name in files: path = os.path.join(root,name) md5v = sumfile(path) newpath = path.replace(dir,'') fileinfo.write(newpath + ':' + md5v + '\n')
def sumfile(fpath): m = md5.new() fobj = open(fpath) while True: d = fobj.read(8096) if not d: break m.update(d) return m.hexdigest()
#獲取腳本文件的當(dāng)前路徑 def cur_file_dir(): #獲取腳本路徑 path = sys.path[0] #判斷為腳本文件還是py2exe編譯后的文件,如果是腳本文件,則返回的是腳本的目錄,如果是py2exe編譯后的文件,則返回的是編譯后的文件路徑 if os.path.isdir(path): return path elif os.path.isfile(path): return os.path.dirname(path) #打印結(jié)果 print cur_file_dir()
def main(): #dir = raw_input('please input the path:') dir = cur_file_dir() fileinfo = open('list3.txt','w') walk_dir(dir,fileinfo)
if __name__ == '__main__': main()
運(yùn)行后 list3.txt 文件中的內(nèi)容如下: \list.txt:0a732356981d24beab0d0c1c4092b2a7 \list2.txt:6cebc24b3a996be27c732557a2ce545f \list3.txt:d41d8cd98f00b204e9800998ecf8427e \list_filenames.py:9201c1eefcaf2fd04478cc2b6430c678 \list_filenames2.py:ca3f74bdb0a5485dd5d95d77da80141b \list_files+.py:720d569d2f07f0c80e0d695db31749ab \test\g.txt:d41d8cd98f00b204e9800998ecf8427e \test\mmm.pptx:6f0e81ad84c22838337f0f619080e7f2 \test2\list.txt:d41d8cd98f00b204e9800998ecf8427e \test2\test3\234.txt:d41d8cd98f00b204e9800998ecf8427e
|