Python随手记(二) 获取目录信息•改

之前已经完成获取目录信息的基本功能,但在内容比较多的目录下运行结果如图1。一个字形容就是“乱”,效果很不好,需要改进。


图1 原始版显示效果

首先感觉时间格式怪怪的,而且星期之类的也没有必要显示,所以从这里下手。查询手册(Python v3.2.3--15.3)找到两个有用的函数,一个是time.strftime(),一个是time.localtime ()[1],分别可以格式化时间,转换秒数为当前时间。如想让时间按照“2012.09.13-19:40:03”格式显示,查找格式字符串表,可知对应的格式化字符串是“%Y.%m.%d-%H:%M:%S”。另外,time.ctime()转换时间是按照标准时间转换的,要使用本地时间需要使用另外一个函数time.localtime()。最终存入字典的语句类似

time.strftime('%Y.%m.%d-%H:%M:%S',time.localtime(tempInfo.st_ctime)))

时间格式改完之后就要调整下输出格式,让各项对齐并按顺序排列。这里使用的方法是固定每一项内容的字符数,从而保证每列整齐。不过在显示文件名时有个问题,有的文件名很长,当其长度超过格式字符串指定值时,print函数会按原长度显示,忽略指定值,造成格式混乱。因此,在显示文件名前,使用len函数检测其长度,如果超出范围则将多余部分用‘…’代替。在Python中截取字符串很简单,直接标注范围就可以,类似[0:17]。

最后,由于字典里的数据时无序的,需要用sorted()函数将字典排序,按照文件名的字母顺序显示记录,这样比较整齐。

最终代码如下:

importos
importtime
importstruct
 
defGetCurPathInfo():
    CurPath = os.getcwd()
    ChildrenList = os.listdir(CurPath)
    InfoDict = dict()
   
    for Name in ChildrenList:
        tempInfo = os.stat(Name)
        tempDict = dict([\
                        ('Size',tempInfo.st_size),\
                        ('CreateTime',time.strftime('%Y.%m.%d-%H:%M:%S',time.localtime(tempInfo.st_ctime))),\
                        ('ModifyTime',time.strftime('%Y.%m.%d-%H:%M:%S',time.localtime(tempInfo.st_mtime)))\
                        ])
        InfoDict[Name] = tempDict
       
    NameOrder = sorted(InfoDict.items())
   
    print('='*80)
    print('%-20s%10s KB  %19s   %19s' %('Name', 'Size', 'ModifyTime', 'CreateTime'))
    print('-'*80)
   
    for Record in NameOrder:
        if len(Record[0])>20:
            ShowName = Record[0][0:17] + '...'
        else:
            ShowName = Record[0]
       
        info = '%-20s%10.2f KB  %19s || %19s' %(ShowName,Record[1]['Size']/1024,\
                              Record[1]['ModifyTime'],Record[1]['CreateTime'])
        print(info)
 
deftest():
    GetCurPathInfo()
    input()
 
if__name__ == '__main__': test()

显示效果如图2:


图2 改进版显示效果

 

 

【附】时间转换的简要说明:


【附】time.strftime格式字符串部分说明:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值