python_ls功能

实现 ls功能

python环境 3.8.10

import  argparse
from  pathlib  import Path
from datetime import datetime
import  stat

parser = argparse.ArgumentParser(prog='ls' , add_help=False , description='help dir or cer ')

parser.add_argument('path',nargs='?',help='print path',default='.' )

parser.add_argument('-a','--all',action='store_true',dest='all',help='print all ')

parser.add_argument('-l','--list',action='store_true',dest='long',help='print list' )

parser.add_argument('-h','--human-readable',action='store_true',dest='human',help='--human-readable')

parser.add_argument('-r','--reverse',action='store_true',dest='reverse',help='reverse list')

args = parser.parse_args()
print (args)

parser.print_help()



#业务代码   首先需要想 -l 查看目录文件 联想到path

# def listdir(path,all=False):
#     p =  Path(path)
#     # for f in p.iterdir(): #序列化,将路径下的文件变成一个可迭代对象
#     #     if not all and f.name.startswith('.'):  #判断
#     #         continue
#     #     yield f.name
#     #yield from filter(lambda f:not(not all and f.name.startswith('.')),p.iterdir()) #将以上for进行改造成yield
#     #yield from filter (lambda f : all or not f.name.startswith('.'),p.iterdir()) #
#     yield from  map(lambda x:x.name,filter(lambda f:all or not f.name.startswith('.'),p.iterdir()))
# #分析以上代码 map 传入一个函数和可迭代对象,返回列表,将filter过滤隐藏文件后的本地文件名传入,返回x.name然后通过yield进行返回
# #通过lamdba 进行过滤 p.iterdir 这是将路径进行序列化然后过滤到.开头的文件,返回非.开头的文件


#-a 的实现
def _listdir(path , all,detail,reverse,human):
    """列出详细的文件rwx"""
    p = Path(path)
    for i in  p.iterdir():
        if not  all and i.name.startswith('.'):
            continue #继续的意思
        if not detail :
            yield (i.name,)
        else :
            st = i.stat()
            mode = stat.filemode(st.st_mode)
            mtime = datetime.fromtimestamp(st.st_mtime).strftime('%y %m %d' '%H' '%M' '%S')
            size = st.st_size if not human else _gethuman(st.st_size)
            yield (mode,st.st_nlink,st.st_uid,st.st_gid,size,mtime,i.name)

# -r的实现,查看文件排序
def listdir(path , all=False,detail=False,reverse=False,human=False):
    """列出详细的文件rwx"""
    return sorted(_listdir(path,all,detail,reverse,human),key=lambda x:x[len(x)-1],reverse=reverse)


#-h  的实现

def _gethuman(size= int):
    units = 'KMGTP'
    depth = 0
    while size > 1000 and depth < len(units) -1:
        depth += 1
        size //= 1000
    return  "{}{}".format(size,units[depth] if depth else ' ')


if __name__ == '__main__':
    args = parser.parse_args()
    print (args)
    parser.print_help()
    files = listdir(args.path,args.all,args.long,args.reverse,args.human)
    print (*files,sep='\n')

基本都是一些常用基本模块+堆命令,自己的水平也不高就写着玩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值