python的日志分析

列出一个目录

from pathlib import Path # “pathlib是一个从3版本开始就能完全替代os.path的内置库 方法:https://www.cnblogs.com/P--K/p/8400379.html
import argparse # 此模块为3.3以后版本,对传进来的参数argparse帮助解析,https://www.cnblogs.com/shmily2018/p/11592448.html
from datetime import datetime # 重新封装了time模块,提供更多接口

def showls (path:Path): # (path:path)参数的注解,告诉参数什么类型,开发环境通过读取你设定的开发环境的类型,在paht.的时候给你提供一些帮助

path.

def showdir (path='.',all=False,detail=False,human=False):
p = Path(path) # 返回的是一个路径,类型linux是<class 'pathlib.PosixPath'>,windows是<class 'pathlib.WindowsPath'>,不能直接打印出来,需要使用for遍历赋值打印出来
for i in p.iterdir(): # 返回一个迭代器,包含p下的所有文件,包括以点开头的隐藏文件
if not all and i.name.startswith('.'): # 短路语法,真真为真,startswith检查字符串是否是以指定字符串开头,返回True或者False
continue # 跳过以点开头的文件
if not detail:
yield (i.name,)
else:
stat = i.stat()
mode = _getfiletype(i) + _getmodestr(stat.st_mode)
atime =datetime.fromtimestamp(stat.st_atime).strftime('%Y %m %d %H:%M:%S')
yield (mode,stat.st_nlink,stat.st_uid,stat.st_gid,stat.st_size,atime,i.name) # 此列表,yield返回成一个生成器,name获取文件名

def _getfiletype(f:Path):
if f.is_dir():
return "d"
elif f.is_block_device():
return "b"
elif f.is_char_device():
return "c"
elif f.is_socket():
return "s"
elif f.is_symlink():
return "l"
else:
return "-"

modlist = dict(zip(range(9),['r','w','x','r','w','x','r','w','x']))
def _getmodestr(mode:int):
m = mode & Oo777
mstr = ''
for i in range(8,-1,-1):
if m >> i & 1:
mstr += modlist[8-i]
else:
mstr += '-'
return mstr

parser = argparse.ArgumentParser(prog="ls",add_help=False,description='list all files') # 构建解析器,prog="ls"重命名,add_help=False,是否加-h帮助,,descriptionb 描述

告诉解析器未来你有多少参数

parser.add_argument("path",nargs="?",default=".",help="path help") # 位置参数,nargs='*'表示参数可设置零个或多个,nargs=' '+'表示参数可设置一个或多个,nargs="?"参数可有可无,default="."默认参数,help,帮助
parser.add_argument("-l",action='store_true') # action='store_true' 可有可无后面无参数
parser.add_argument("-h",action='store_true') # action='store_true' 可有可无后面无参数,-h 与默认选项会冲突add_help=True改为False,否者会报错提示冲突
parser.add_argument("-a","--all",action='store_true') # action='store_true' 可有可无后面无参数

if name == "main": # 文档在运行前变量函数名__name__,一旦此文件运行就就为__main__,用来判断此文件是否运行,执行以下代码
args = parser.parse_args(("/root",)) # 参数必须是可迭代对象,比如元组,字符串需要使用.split()通过指定分隔符对字符串进行切片,这里使用空格
parser.print_help()
print('args =',args)
print(args.path,args.l,args.h,args.all)

for x in showdir(args.path):
print(x)

猜你喜欢

转载自www.cnblogs.com/hao-ran/p/12371509.html