第一题:
1. 创建add_log装饰器,被装饰的函数日志信息被记录到/var/log/python.log文件中;
2. 日志格式为: [字符串时间] Level: 日志级别 Name: 函数名称, Runtime:xxx Result:xxx
[注]: 装饰器带有参数;
import time
import functools
def add_log(Level):
def write_log(fun):
@functools.wraps(fun) # 不会改变原函数的属性;
def wrapper(*args, **kwargs):
start_time = time.time()
res = fun(*args, **kwargs)
end_time = time.time()
#time.ctime() 获取系统字符串时间
with open('/var/log/python.log','a+') as file_it:
file_it.write("[%s] Level: %s Name: %s Runtime:%s Result: %s" % (time.ctime(),Level,fun.__name__, end_time - start_time,res))
return res
return wrapper
return write_log
@add_log('Infor')
def add(*args):
time.sleep(1)
return sum(args)
print(add(1,2))
第二题:
这个文本文件核心有几种情况:
序号 ID 操作者 操作行为 操作行为 操作对象
6883 556773833 RemyMCMXI
6880 556772838 Mindmatrix restored undeleted RemyMCMXI
6882 556771715 RemyMCMXI
6881 556770863 RemyMCMXI
6880 556673938 Liua97
6879 554350969 Epicgenius
6880 554332653 Alex
找到restored所在行,得到该行序号6880,然后往下读,找到第一个与其序号相同的行(liua97那行),然后记录下这两行之间所有的id值(包括restored那行),这个例子就是记录下556772838 556771715 556770863这三个id。
ID_list = list()
find_restored_flag = 0
serial_number = ''
with open('/mnt/filetest') as file_it:
for line in file_it:
if find_restored_flag == 1: #只有当标志是1的时候存放序号的字符串serial_number不是空串
if not line.startswith(serial_number): #下面每一行如果没有相同的序号,将改行的ID保存至ID_list中
ID_list.append(line.split()[1])
else: #下面的行中又找到的与serial_number相同的序号的行,那么就退出读取文件操作
break
if 'restored' in line and find_restored_flag == 0: #找到restored的一行,标志变为1
find_restored_flag = 1
serial_number = line.split()[0]
ID_list.append(line.split()[1])
print(ID_list)
第三题: 合并指定目录下的所有.py文件的内容到一个文件中all.py文件;
import os
def SearchAbsPath(dirname):
"""
os.walk() ,按照目录层对目录中的所有文件或文件夹进行遍历,
每层的结果是一个三元组(root,dirs,files)()最终将所有层的的结果变为一个生成器
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)
:param dirname: 需要合并文件的目录
:return: filenames 符合要求的文件的绝对路径的列表
"""
dirname = os.path.abspath(dirname) #将输入的目录变为绝对路径
filenames = list()
for root,dirs,files in os.walk(dirname, topdown=False): #扫描一层目录
for name in files:
filenames.append(root+os.path.sep+name) #每一个文件的绝对路径放入列表
return filenames
def Mergefiles(path,suffix,*args):
"""
:param path合并内容的文件(绝对路径)
:param suffix: 需要合并的文件的后缀
:param args: 存放需要合并内容的文件名(绝对路径)
:return:
"""
with open(path,'w+') as file_it_all:
for filename in args:
if filename.endswith(suffix):
with open(filename) as file_it:
for line in file_it:
file_it_all.write(line)
print('ok!')
Mergefiles('all.py','.py',*SearchAbsPath('.'))