7.3 文件处理示例——文件属性浏览程序

本节将运用前面学习的内容,设计一个浏览文件属性的程序。通过给定的目录路径查看文件的名称、大小、创建时间、最后修改日期和最后访问日期。设计一个函数showFileProperties(path),path表示目录的路径,该函数可以查看path目录下所有文件的属性。showFileProperties()的实现大致分为如下3个步骤。

1)遍历path指定的目录,获取每个子目录的路径。

2)遍历子目录下的所有文件,并返回文件的属性列表。

3)分解属性列表,对属性列表的值进行格式化输出。

步骤1可以采用7.2.2小节的思路实现目录的遍历。步骤2通过os模块的函数stat()返回文件的属性列表,该属性列表包括文件的大小、创建时间、最后修改时间、最后访问时间等信息。步骤3通过列表的索引获取文件的各个属性。对于文件的时间属性,调用time模块的函数localtime()返回时间类型,并结合字符串的格式化输出文件的时间属性。下面【例7-12】这段代码调用函数showFileProperties(),列出了D:\developer\python\example\07\7.2.2路径下所有文件的属性。

【例7-12.py】


01     import time,os                          # 导入time,os模块
02     def showFileProperties(path):
03         '''显示文件的属性。包括路径、大小、创建日期、最后修改时间,最后访问时间'''
04         for root,dirs,files in os.walk(path,True):
05             print ("位置:" + root)
06             for filename in files:
07                 state = os.stat(os.path.join(root, filename))
08                 info = "文件名: " + filename + " "
09                 info = info + "大小:" + ("%d" % state[-4]) + " "
10                 t = time.strftime("%Y-%m-%d %X", time.localtime(state[-1]))
11                 info = info + "创建时间:" + t + " "
12                 t = time.strftime("%Y-%m-%d %X", time.localtime(state[-2]))
13                 info = info + "最后修改时间:" + t + " "
14                 t = time.strftime("%Y-%m-%d %X", time.localtime(state[-3]))
15                 info = info + "最后访问时间:" + t + " "
16                 print (info)
17
18     if __name__ == "__main__":
19         path = r"D:\python例题源代码\ch07code"
20         showFileProperties(path)

【代码说明】

·第4行代码调用函数os.walk()对path指定的路径进行遍历。

·第5行代码输出path路径下每个子目录的路径。输出结果如下所示。


位置:D:\python例题源代码\ch07code

·第6行代码对每个子目录进行遍历,返回文件名称。

·第7行代码调用os.stat()返回文件的属性列表。

·第9行代码,state[-4]表示文件的大小。

·第10行代码调用time模块的strftime()把时间类型转换为字符串。其中state[-1]表示文件的创建时间。

·第12行代码,state[-2]表示文件的最后修改时间。

·第14行代码,state[-3]表示文件的最后访问时间。

·第16行代码输出文件的属性信息。输出的内容如下所示。


文件名: hello.txt 大小:14 创建时间:2019-07-25 14:56:01 最后修改时间:2019-07-25 16:05:43 最后访问时间:2019-07-25 14:56:01
文件名: hello2.txt 大小:26 创建时间:2019-07-25 14:19:13 最后修改时间:2019-07-25 08:16:24 最后访问时间:2019-07-25 14:19:13
文件名: mysqlconfig.ini 大小:149 创建时间:2019-07-25 13:05:57 最后修改时间:2019-07-25 14:03:06 最后访问时间:2019-07-25 13:05:57
文件名: record.log 大小:0 创建时间:2019-07-25 14:20:55 最后修改时间:2019-07-25 14:20:55 最后访问时间:2019-07-25 14:20:55
文件名: 例7-1.py 大小:168 创建时间:2019-07-25 08:05:47 最后修改时间:2019-07-25 08:05:47 最后访问时间:2019-07-25 08:05:47
文件名: 例7-10.py 大小:359 创建时间:2019-07-25 14:09:33 最后修改时间:2019-07-25 14:09:33 最后访问时间:2019-07-25 14:09:33
文件名: 例7-11.py 大小:256 创建时间:2019-07-25 14:13:39 最后修改时间:2019-07-25 14:15:52 最后访问时间:2019-07-25 14:13:39
文件名: 例7-12.py 大小:883 创建时间:2019-07-25 16:20:48 最后修改时间:2019-07-25 16:28:14 最后访问时间:2019-07-25 16:20:48
文件名: 例7-2.py 大小:329 创建时间:2019-07-25 08:07:29 最后修改时间:2019-07-25 08:07:29 最后访问时间:2019-07-25 08:07:29
文件名: 例7-3.py 大小:325 创建时间:2019-07-25 08:10:56 最后修改时间:2019-07-25 08:16:23 最后访问时间:2019-07-25 08:10:56
文件名: 例7-4.py 大小:262 创建时间:2019-07-25 08:20:09 最后修改时间:2019-07-25 08:20:29 最后访问时间:2019-07-25 08:20:09
文件名: 例7-5.py 大小:348 创建时间:2019-07-25 08:23:03 最后修改时间:2019-07-25 08:25:18 最后访问时间:2019-07-25 08:23:03
文件名: 例7-6.py 大小:725 创建时间:2019-07-25 13:22:32 最后修改时间:2019-07-25 13:33:00 最后访问时间:2019-07-25 13:22:32
文件名: 例7-7.py 大小:356 创建时间:2019-07-25 13:49:45 最后修改时间:2019-07-25 13:50:34 最后访问时间:2019-07-25 13:49:45
文件名: 例7-8.py 大小:319 创建时间:2019-07-25 13:56:54 最后修改时间:2019-07-25 13:57:10 最后访问时间:2019-07-25 13:56:54
文件名: 例7-9.py 大小:381 创建时间:2019-07-25 14:03:05 最后修改时间:2019-07-25 14:03:05 最后访问时间:2019-07-25 14:03:05

注意 os.stat()的参数必须是绝对路径。因此,需要先调用os.path.join(root,filename)连接文件的路径和文件名。