源自廖雪峰python教程-文件操作和目錄
中的兩道練習(xí)題
1.利用os模塊編寫(xiě)一個(gè)能實(shí)現(xiàn)dir -l輸出的程序。
2.編寫(xiě)一個(gè)程序断医,能在當(dāng)前目錄以及當(dāng)前目錄的所有子目錄下查找文件名包含指定字符串的文件金闽,并打印出相對(duì)路徑簸州。
第一道題的代碼如下:
import time
import os
filelist = [x for x in os.listdir('.') if os.path.isfile(x)]#找到當(dāng)前目錄的文件類(lèi)型的文件鹏秋。
path = os.path.abspath('.')
def get_user_name():
return os.environ['LOGNAME']#environ是個(gè)包含很多環(huán)境信息的字典究履,key為L(zhǎng)OGNAME對(duì)應(yīng)的value就是username了
def get_file_time(filename):
filepath = os.path.join(path,filename)
localtime = time.localtime(os.path.getatime(filepath))
return time.asctime(localtime)
def get_file_size(filename):
#先把文件用二進(jìn)制讀入再計(jì)算大小抗悍,非常蠢驹饺,開(kāi)銷(xiāo)很大,系統(tǒng)應(yīng)該有接口可以讀入文件的大小信息缴渊,不用計(jì)算∩鸵迹現(xiàn)在不知道,先不管衔沼。
with open(filename,'rb') as f:
return(len(f.read()))
for f in filelist:
print(get_user_name(),get_file_time(f),get_file_size(f) ,f)
運(yùn)行結(jié)果:
我自己的程序能顯示文件主人name蝌借,文件創(chuàng)建時(shí)間,文件大小指蚁,文件名和bash不同的是:1,文件夾沒(méi)有顯示菩佑。2,多了隱藏文件,比如文檔的交換區(qū)文件凝化。
第二道題代碼如下:
import os
filename = input("input the file name:\n")
def fileserch(filename):
filelist = [x for x in os.listdir() if os.path.isfile(x)]
for f in filelist:
if filename in str(f[0:f.find(".")]):#要把擴(kuò)展名刨出去稍坯,不然查找文件名中含‘t’的文件,會(huì)把所有的txt文件全找出來(lái)搓劫,這樣就不科學(xué)了瞧哟。
print(os.path.abspath(f))
def findfile(filename):
fileserch(filename)
dirlist = [x for x in os.listdir() if os.path.isdir(x)]
for d in dirlist:
os.chdir(d)
findfile(filename)
os.chdir("..")
findfile(filename)
試驗(yàn)結(jié)果:
主要思想是深度搜索,先輸出當(dāng)前目錄下所有文件類(lèi)型的文件枪向,再對(duì)所有文件夾類(lèi)型的文件遞歸操作绢涡。