源自廖雪峰python教程-文件操作和目录
中的两道练习题
1.利用os模块编写一个能实现dir -l输出的程序。
2.编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
第一道题的代码如下:
import time
import os
filelist = [x for x in os.listdir('.') if os.path.isfile(x)]#找到当前目录的文件类型的文件。
path = os.path.abspath('.')
def get_user_name():
return os.environ['LOGNAME']#environ是个包含很多环境信息的字典,key为LOGNAME对应的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):
#先把文件用二进制读入再计算大小,非常蠢,开销很大,系统应该有接口可以读入文件的大小信息,不用计算。现在不知道,先不管。
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)
运行结果:
我自己的程序能显示文件主人name,文件创建时间,文件大小,文件名和bash不同的是:1,文件夹没有显示。2,多了隐藏文件,比如文档的交换区文件。
第二道题代码如下:
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(".")]):#要把扩展名刨出去,不然查找文件名中含‘t’的文件,会把所有的txt文件全找出来,这样就不科学了。
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)
试验结果:
主要思想是深度搜索,先输出当前目录下所有文件类型的文件,再对所有文件夹类型的文件递归操作。