利用os模块编写一个能实现dir - l输出的程序

在Linux下命令ls和dir都有相同的功能:打印当前文件夹目录。

注:ls是Linux的原装命令,dir是原来dos的命令,Linux选择兼容了此个dos命令,所以dir和ls在功能上是一样的。

1。ls命令

常见的ls命令有:

ls #显示不隐藏的文件与文件夹ls - l

#显示不隐藏的文件与文件夹的详细信息

ls——#显示当前目录下的所有文件(包含。开头的隐藏文件)

注意:总为当前目录下所有文件占用的内存块(block)的大小,即下图第一列数值之和。

2。Python实现dir - l命令

对于利用os模块编写一个能实现dir - l输出的程序,首先得了解一下各个字段的含义,请参考:

https://baike.baidu.com/item/ls%20-l/5261110?fr=阿拉丁

显然难点在于怎样获取文件权限,文件大小,文件创建时间。

import操作系统

进口时间进口统计

导入数学从pwd进口getpwuid

从grp进口getgrgid

FILE_PERMS=[

{“r”: stat.S_IRUSR ' w ': stat.S_IWUSR,“x”: stat.S_IXUSR},

{“r”: stat.S_IRGRP ' w ': stat.S_IWGRP,“x”: stat.S_IXGRP},

{“r”: stat.S_IROTH ' w ': stat.S_IWOTH,“x”: stat.S_IXOTH})

类信息:

def __init__(自我、名称、size_width=0):

自我。宽度=size_width

statinfo=os.stat(名字)

=statinfo模式。st_mode

self.name=名称

fmt=? b H % d %: % M”

自我。日期=时间。strftime (fmt, time.localtime (statinfo.st_mtime))

自我。=statinfo大小。st_size

allocated_size=statinfo。st_blocks * statinfo。st_blksize

f_bsize=os.statvfs(名字)。f_bsize

f_block_num=数学。装天花板(allocated_size/f_bsize)

自我。fsize=f_block_num * f_bsize//1024

自我。用户=getpwuid (statinfo.st_uid)。pw_name

自我。组=getgrgid (statinfo.st_gid)。gr_name

自我。nlink=statinfo。st_nlink

自我。烫=' d '如果stat.S_ISDIR(模式)”——“烫的

FILE_PERMS:

自我。烫+=' r '如果模式,其他烫[' r ']”——“

自我。烫+=' w '如果模式,烫其他[' w '] ', '

自我。烫+=' x '如果模式,其他烫[' x ']”——“

#魔术方法:覆盖方法在对象

def __str__(自我):

返回“{}{}{}{}{:{宽度}}{}{}”。格式(

自我。烫,自我。nlink,自我。用户自我。集团

自我。大小、自我。日期、self.name宽度=self.width)

if __name__==癬_main__”:总=0

dir_list=[]

宽度=0

x os.listdir (' . '):

如果x [0]==薄!?

继续项=Info (x)

宽度=max(宽度,len (str (item.size)))

+=总项目。fsize

dir_list.append (x)

打印(“总”,总)

x的排序(dir_list、关键=λz: z.upper ()):

打印(信息(x,宽度))


利用os模块编写一个能实现dir - l输出的程序