小白求助:求大哥修改一下这堆臭狗屎
本帖最后由 任申猴 于 2022-8-31 15:10 编辑我东拼西凑的狗屎代码
# -*- coding:utf-8 -*-
import os
import sys
import re
import zipfile# 解压文件库
import pandas as pd
from docx import Document
from docx.shared import Cm, Pt
import datetime
import time
from datetime import datetime
def duqu():
"""读取文件夹最新改动的文件"""
dir = r'C:\Users\admin\Desktop\新建文件夹'
# a = os.path.getatime(dir)# 输出最近访问时间
# b = os.path.getctime(dir)# 输出文件创建时间
# c = os.path.getmtime(dir)# 输出最近修改时间
d = time.gmtime(os.path.getmtime(dir))# 以struct_time形式输出最近修改时间
file_lists = os.listdir(dir)# 输出文件夹下目录 print(file_lists[-1])# 输出最新文件
file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\\" + fn)
if not os.path.isdir(dir + "\\" + fn) else 0)
x = os.path.join(dir, file_lists[-1])# 输出最新文件的目录
# """修改word文档字体大小"""
# document = Document(rf"{x}")
# tables = document.tables
# style = document.styles['Normal']
# font = style.font
# font.name = 'Calibri'
# font.size = Pt(10)
# document.save(rf"{x}")
return x
def deal():
docx_path = f'{duqu()}'
# 先将要处理的word文档用zipfile进行压缩
word = zipfile.ZipFile(docx_path)
# 找到要处理的xml文件并以utf-8的格式读取
xml = word.read('word/document.xml').decode('utf-8')
# 接下来分割字符串并存储到列表中
xml_list = xml.split('<w:t>')# 以字符串<w:t>进行分割字符串
# print(xml_list)# 列表内容 # print(type(xml_list))# 是列表
# 开始切片,找标签</w:t>
text_list = []# 新建空list用以存储切出来的数据
# 开始循环读取列表xml_list
for i in xml_list:
# 条件查找
if i.find('</w:t>') + 1:# 切片查找是如果没找到是会返回-1,我们+1让他返回0,再运行else分支
text_list.append(i[:i.find('</w:t>')])# 如果不是返回0就把找到的依次追加到text_list末尾
a_list = text_list
"""各种删除筛选"""
del a_list
a1_list = re.sub('\+08:00', '', ''.join(a_list))
a2_list = re.sub(r'[\u4e00-\u9fa5]{2} \([\u4e00-\u9fa5]{2}\)', ',', ''.join(a1_list))
a3_list = re.sub('\d+.\W\D\D\D.S', ',', ''.join(a2_list))
for i in a_list:# 筛选数据
if i == '系统 (系统)':
a_list.remove(i)
m1 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..\d+-+.S.[\u4e00-\u9fa5]{2})')
m1 = m1.findall(str(a_list))
m2 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{2}\d+.S.[\u4e00-\u9fa5]{2})')
m2 = m2.findall(str(a_list))
m3 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{3}\d+.S.[\u4e00-\u9fa5]{2})')
m3 = m3.findall(str(a_list))
m = m1 + m2 + m3
m = re.sub('(\+08:00)', '', ''.join(m))
m = re.sub('\d+-+.S', '', ''.join(m))
m = re.sub('[\u4e00-\u9fa5]{3}\d+..', '', ''.join(m))
m = re.sub('[\u4e00-\u9fa5]{2}\d+..', '', ''.join(m))
m = m.replace(" 开始'", "开始,")
m = m.replace(" 完成'", "完成,")
m = m.replace(" 暂停'", "暂停,")
m = m.replace("' ", "")
m = m.replace("'", "")
m = m.replace(", ", ",")
m = m.split(',')
# 转换为字典
l1 = m[::2]
l2 = m
d1 = zip(l1, l2)
d1 = dict(d1)
# value = list(d1.values())# 获取字典VALUE
ey = list(d1)# 获取字典key
ey = datetime.strptime(ey, '%Y-%m-%d %H:%M:%S')
ey1 = list(d1)[-1]
ey1 = datetime.strptime(ey1, '%Y-%m-%d %H:%M:%S')
filetime = ey - ey1
new_sys1 = sorted(d1.items(), key=lambda d: d, reverse=False)
df = pd.DataFrame(new_sys1, columns=['time', 'flag'])
df = df.astype({'time': 'datetime64'})
df0 = df.sort_values('time').reset_index(drop=True)
df1 = df.sort_values('time').reset_index(drop=True).shift()
res = pd.concat(, axis=1)
res.columns = ['t1', 'f1', 't2', 'f2']
result = res[((res.f1 == '暂停') & (res.f2 == '开始')) |
((res.f1 == '完成') & (res.f2 == '开始'))].loc[:]
result['used_time'] = result.t1 - result.t2
result.agg({'used_time': sum}, )
action_time = (result.agg({'used_time': sum}, ) / filetime)# 设备使用时间/表内时间
action_time = str(action_time)# 转为字符串取出数字
action_time1 = re.findall(r"0.\d\d", action_time)
action_time1 = ' '.join(action_time1)# 列表去掉[]与引号
action_time1 = float(action_time1)
action_time1 = "%.2f%%" % (action_time1 * 100)# 转换为百分比
month = duqu()# 取出文件名称
month = re.findall("\d+\.?\d*", month)
month = ' '.join(month)
print(result.agg)
print('设备运行时间', result.agg({'used_time': sum}, ))
print(f'{month}月设备使用率', action_time1)
print(f'表{month}的开始时间:', ey1)
print(f'表{month}的结束时间:', ey)
print(f'表{month}的内总时间:', filetime)
"""日志生成"""
log_print = open(f'{month}设备使用率.log', 'w')
sys.stdout = log_print
sys.stderr = log_print
if __name__ == '__main__':
duqu()
deal()
print(duqu())
print(deal())
运行结果
C:\Users\admin\PycharmProjects\python-办公\venv\Scripts\python.exe C:/Users/admin/Desktop/A.py
<bound method DataFrame.aggregate of t1f1 t2f2 used_time
2 2022-06-28 21:22:12完成 2022-06-28 20:36:11开始 0 days 00:46:01
4 2022-06-29 19:38:53暂停 2022-06-28 22:00:28开始 0 days 21:38:25
6 2022-06-30 10:06:34完成 2022-06-29 20:36:31开始 0 days 13:30:03
8 2022-06-30 13:24:35完成 2022-06-30 10:57:16开始 0 days 02:27:19>
设备运行时间 used_time 1 days 14:21:48
dtype: timedelta64
1.月设备使用率 54.00%
表1.的开始时间: 2022-06-28 20:06:02
表1.的结束时间: 2022-07-01 18:31:57
表1.的内总时间: 2 days, 22:25:55
进程已结束,退出代码0
word文档读取出来的数据
C:\Users\admin\PycharmProjects\python-办公\venv\Scripts\python.exe C:/Users/admin/Desktop/A.py
['2022-07-01 18:31:57+08:00', '系统 (系统)', '20220701-KBW.S 开始', '2022-07-01 18:31:56+08:00', '系统 (系统)', '已排队条目 20220701-KBW 状态更改为 正在运行。', '2022-07-01 18:31:56+08:00', '系统 (系统)', '正在调用序列20220701-KBW.S', '2022-07-01 18:31:56+08:00', '系统 (系统)', '已排队条目 20220701-KBW 状态更改为 已提交。', '2022-07-01 18:31:54+08:00', '系统 (系统)', '正在保存序列20220701-KBW.S', '2022-07-01 18:23:02+08:00', '系统 (系统)', '正在调用序列DEF_LC.S', '2022-07-01 18:22:35+08:00', '系统 (系统)', '正在调用序列DEF_LC.S', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 获取系统就绪触发', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯开启', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 获取系统就绪触发', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 获取系统就绪触发', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 获取系统就绪触发', '2022-07-01 18:21:24+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵开启', '2022-07-01 18:19:38+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-07-01 09:33:41+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-07-01 09:33:39+08:00', '系统 (系统)', '调用方法 DEF_LC.M', '2022-07-01 09:33:30+08:00', '系统 (系统)', 'ChemStation', '09:33:26+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 阀操作在指定', '温度范围内', '2022-07-01 09:33:26+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 阀不存在', '2022-07-01 09:33:26+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱关闭', '2022-07-01 09:33:20+08:00', '系统 (系统)', 'ChemStation', '2022-07-01 09:33:03+08:00', '系统 (系统)', '用户 "系统 (系统)" 已登录', '2022-07-01 09:32:59+08:00', '系统 (系统)', '用户 "系统 (系统)" 已登录', '2022-07-01 09:32:26+08:00', '系统 (系统)', 'ChemStation', '2022-07-01 09:31:18+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-07-01 09:31:16+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-07-01 09:31:16+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 -由于模块离线下载进样器程序失败!', '2022-07-01 09:31:16+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 -由于模块离线下载进样器程序失败!', '2022-07-01 09:31:16+08:00', '系统 (系统)', 'G7120A:DEBAY04079 -由于模块离线方法下载失败!', '2022-07-01 09:31:16+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 -由于模块离线方法下载失败!', '2022-07-01 09:31:16+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 -由于模块离线方法下载失败!', '2022-07-01 09:31:16+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 -由于模块离线方法下载失败!', '2022-07-01 09:31:13+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-07-01 09:31:13+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-07-01 09:22:15+08:00', '系统 (系统)', 'ChemStation', '2022-07-01 09:21:30+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 通讯错误。', '2022-07-01 09:21:30+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 通讯错误。', '2022-07-01 09:21:30+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 通讯错误。', '2022-07-01 09:21:30+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 通讯错误。', '2022-07-01 09:21:30+08:00', '系统 (系统)', '通讯错误', '2022-07-01 03:14:02+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 已完成。', '2022-07-01 03:14:01+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-07-01 03:14:01+08:00', '系统 (系统)', '20220628-kbw.S 完成', '2022-07-01 03:14:01+08:00', '系统 (系统)', '序列工作日志文件保存在 20220628-kbw.LOG', '18:09:17+08:00', '系统 (系统)', '20220628-kbw.S 开始', '2022-06-30 18:09:17+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 正在运行。', '2022-06-30 18:09:16+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-06-30 18:09:16+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 已提交。', '2022-06-30 14:48:26+08:00', '系统 (系统)', '正在保存序列20220628-kbw.S', '2022-06-30 14:48:26+08:00', '系统 (系统)', '正在保存序列20220628-kbw.S', '2022-06-30 14:46:37+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 获取系统就绪触发', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯开启', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 获取系统就绪触发', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 获取系统就绪触发', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 获取系统就绪触发', '2022-06-30 14:46:01+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵开启', '2022-06-30 14:45:59+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-06-30 13:24:35+08:00', '系统 (系统)', '已排队条目 赭曲20220630 状态更改为 已完成。', '2022-06-30 13:24:35+08:00', '系统 (系统)', '正在调用序列赭曲20220630.S', '2022-06-30 13:24:35+08:00', '系统 (系统)', '序列工作日志文件保存在 赭曲20220630.LOG', '2022-06-30 13:24:35+08:00', '系统 (系统)', '赭曲20220630.S 完成', '2022-06-30 10:57:16+08:00', '系统 (系统)', '赭曲20220630.S 开始', '2022-06-30 10:57:16+08:00', '系统 (系统)', '已排队条目 赭曲20220630 状态更改为 正在运行。', '2022-06-30 10:57:15+08:00', '系统 (系统)', '正在调用序列赭曲20220630.S', '2022-06-30 10:57:15+08:00', '系统 (系统)', '已排队条目 赭曲20220630 状态更改为 已提交。', '2022-06-30 10:57:11+08:00', '系统 (系统)', '正在保存序列赭曲20220630.S', '2022-06-30 10:35:56+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 冲洗关闭', '2022-06-30 10:30:55+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 清洗开启 (持续时间: 5.00 min; 流量: 5.000 mL/min; A: 0.00 %; B: 100.00 %)', '2022-06-30 10:30:55+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 冲洗开启', '2022-06-30 10:16:54+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 冲洗关闭', '2022-06-30 10:15:30+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 获取系统就绪触发', '2022-06-30 10:15:30+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯开启', '2022-06-30 10:15:28+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 获取系统就绪触发', '2022-06-30 10:15:28+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-06-30 10:12:51+08:00', '系统 (系统)', '正在调用序列DEF_LC.S', '2022-06-30 10:11:53+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 清洗开启 (持续时间: 5.00 min; 流量: 5.000 mL/min; A: 100.00 %; B: 0.00 %)', '2022-06-30 10:11:53+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 冲洗开启', '2022-06-30 10:11:45+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵开启', '2022-06-30 10:11:45+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 冲洗关闭', '2022-06-30 10:11:44+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 获取系统就绪触发', '2022-06-30 10:08:16+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 清洗开启 (持续时间: 5.00 min; 流量: 5.000 mL/min; A: 100.00 %; B: 0.00 %)', '10:08:16+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 冲洗开启', '2022-06-30 10:07:12+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 系统关闭触发', '2022-06-30 10:07:09+08:00', '系统 (系统)', '调用方法 赭曲霉毒素A-5009.96.M', '2022-06-30 10:06:34+08:00', '系统 (系统)', '20220628-kbw.S 完成', '2022-06-29 20:36:31+08:00', '系统 (系统)', '20220628-kbw.S 开始', '2022-06-30 10:06:34+08:00', '系统 (系统)', '20220628-kbw.S 完成', '2022-06-29 20:36:31+08:00', '系统 (系统)', '20220628-kbw.S 开始', '2022-06-29 20:36:31+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 正在运行。', '2022-06-29 20:36:30+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-06-29 20:36:30+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 已提交。', '2022-06-29 19:46:58+08:00', '系统 (系统)', '正在保存序列20220628-kbw.S', '2022-06-29 19:44:50+08:00', '系统 (系统)', '用户 "系统 (系统)" 已登录', '2022-06-29 19:44:46+08:00', '系统 (系统)', '用户 "系统 (系统)" 已登录', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 获取系统就绪触发', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯开启', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 获取系统就绪触发', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 获取系统就绪触发', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 获取系统就绪触发', '2022-06-29 19:44:11+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵开启', '2022-06-29 19:44:11+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-06-29 19:42:00+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-06-29 19:41:58+08:00', '系统 (系统)', '调用方法 DEF_LC.M', '2022-06-29 19:41:48+08:00', '系统 (系统)', 'ChemStation', '2022-06-29 19:41:43+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 阀操作在指定温度范围内', '2022-06-29 19:41:43+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 阀不存在', '2022-06-29 19:41:43+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱关闭', '19:41:36+08:00', '系统 (系统)', 'ChemStation', '录仪器后未更改。', '2022-06-29 19:41:17+08:00', '系统 (系统)', '用户 "系统 (系统)" 已登录', '2022-06-29 19:41:12+08:00', '系统 (系统)', '用户 "系统 (系统)" 已登录', '2022-06-29 19:41:04+08:00', '系统 (系统)', 'ChemStation', '2022-06-29 19:40:57+08:00', '系统 (系统)', 'ChemStation', '2022-06-29 19:40:53+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯关闭', '2022-06-29 19:40:53+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱关闭', '2022-06-29 19:40:53+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵待机', '2022-06-29 19:40:47+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 已停止。', '2022-06-29 19:40:47+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-06-29 19:40:46+08:00', '系统 (系统)', '序列工作日志文件保存在 20220628-kbw.LOG', '2022-06-29 19:40:43+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-06-29 19:40:42+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 正在运行。', '2022-06-29 19:38:54+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 已暂停。', '2022-06-29 19:38:53+08:00', '系统 (系统)', '序列工作日志文件保存在 20220628-kbw.LOG', '2022-06-29 19:38:53+08:00', '系统 (系统)', '20220628-kbw.S 暂停', '2022-06-28 22:00:28+08:00', '系统 (系统)', '20220628-kbw.S 开始', '2022-06-28 22:00:28+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 正在运行。', '2022-06-28 22:00:27+08:00', '系统 (系统)', '正在调用序列20220628-kbw.S', '2022-06-28 22:00:27+08:00', '系统 (系统)', '已排队条目 20220628-kbw 状态更改为 已提交。', '2022-06-28 21:59:16+08:00', '系统 (系统)', '正在保存序列20220628-kbw.S', '2022-06-28 21:51:38+08:00', '系统 (系统)', '正在调用序列DEF_LC.S', '2022-06-28 21:51:31+08:00', '系统 (系统)', '调用方法 氨基甲酸酯.M', '2022-06-28 21:51:15+08:00', '系统 (系统)', '正在调用序列克百威20220627.S', '2022-06-28 21:51:13+08:00', '系统 (系统)', '调用方法 DEF_LC.M', '2022-06-28 21:51:03+08:00', '系统 (系统)', 'ChemStation', '2022-06-28 21:51:01+08:00', '系统 (系统)', '21:50:59+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 阀操作在指定', '温度范围内', '2022-06-28 21:50:59+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 阀不存在', '2022-06-28 21:50:59+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-06-28 21:50:52+08:00', '系统 (系统)', 'ChemStation', '2022-06-28 21:49:33+08:00', '系统 (系统)', '正在调用序列DEF_LC.S', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 获取系统就绪触发', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯开启', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 获取系统就绪触发', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 获取系统就绪触发', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 获取系统就绪触发', '2022-06-28 21:49:29+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵开启', '2022-06-28 21:22:13+08:00', '系统 (系统)', '已排队条目 克百威20220627 状态更改为 已完成。', '2022-06-28 21:22:13+08:00', '系统 (系统)', '正在调用序列克百威20220627.S', '2022-06-28 21:22:12+08:00', '系统 (系统)', '克百威20220627.S 完成', '2022-06-28 21:22:12+08:00', '系统 (系统)', '序列工作日志文件保存在 克百威20220627.LOG', '2022-06-28 20:36:11+08:00', '系统 (系统)', '克百威20220627.S 开始', '2022-06-28 20:36:11+08:00', '系统 (系统)', '已排队条目 克百威20220627 状态更改为 正在运行。', '2022-06-28 20:36:11+08:00', '系统 (系统)', '正在调用序列克百威20220627.S', '2022-06-28 20:36:11+08:00', '系统 (系统)', '已排队条目 克百威20220627 状态更改为 已提交。', '2022-06-28 20:35:26+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 前门已关闭', '2022-06-28 20:33:52+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 前门打开', '2022-06-28 20:15:44+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 获取系统就绪触发', '2022-06-28 20:15:44+08:00', '系统 (系统)', 'G7121B:DEAEJ02404 - 灯开启', '2022-06-28 20:15:44+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 获取系统就绪触发', '2022-06-28 20:15:44+08:00', '系统 (系统)', 'G7116B:DEBAZ06201 - 柱温箱开启', '2022-06-28 20:15:44+08:00', '系统 (系统)', 'G7167B:DEBAQ05255 - 获取系统就绪触发', '20:15:44+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 获取系统就绪', '触发', '2022-06-28 20:15:44+08:00', '系统 (系统)', 'G7120A:DEBAY04079 - 泵开启', '2022-06-28 20:06:03+08:00', '系统 (系统)', '已排队条目 克百威20220627 状态更改为 已完成。', '2022-06-28 20:06:03+08:00', '系统 (系统)', '正在调用序列克百威20220627.S', '2022-06-28 20:06:02+08:00', '系统 (系统)', '序列工作日志文件保存在 克百威20220627.LOG', '2022-06-28 20:06:02+08:00', '系统 (系统)', '克百威20220627.S 完成', '2022-06-28 10:35:30+08:00', '系统 (系统)', '活动日志已启用']
进程已结束,退出代码0
需要的数据
2022-07-01 03:14:01+08:00 系统 (系统) 20220628-kbw.S 完成
-------
2022-06-30 18:09:17+08:00 系统 (系统) 20220628-kbw.S 开始
2022-06-30 13:24:35+08:00 系统 (系统) 赭曲20220630.S 完成
--------
2022-06-30 10:57:16+08:00 系统 (系统) 赭曲20220630.S 开始
2022-06-29 20:36:31+08:00 系统 (系统) 20220628-kbw.S 开始
------
2022-06-30 10:06:34+08:00 系统 (系统) 20220628-kbw.S 完成
2022-06-29 19:38:53+08:00 系统 (系统) 20220628-kbw.S 暂停
........
2022-06-28 22:00:28+08:00 系统 (系统) 20220628-kbw.S 开始
类似这种 以时间先后顺序计算出 :完成 减开始 的时间 暂停减 开始 的时间
最后相加
PS:求大哥不要只说思路 整不明白
<font face="楷体, 楷体_GB2312"># -*- coding:utf-8 -*-
import os
import sys
import re
import zipfile# 解压文件库
import pandas as pd
from docx import Document
from docx.shared import Cm, Pt
import datetime
import time
from datetime import datetime
def duqu():
"""读取文件夹最新改动的文件"""
dir = r'C:\Users\admin\Desktop\新建文件夹'
# a = os.path.getatime(dir)# 输出最近访问时间
# b = os.path.getctime(dir)# 输出文件创建时间
# c = os.path.getmtime(dir)# 输出最近修改时间
d = time.gmtime(os.path.getmtime(dir))# 以struct_time形式输出最近修改时间
file_lists = os.listdir(dir)# 输出文件夹下目录 print(file_lists[-1])# 输出最新文件
file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\" + fn)
if not os.path.isdir(dir + "\" + fn) else 0)
x = os.path.join(dir, file_lists[-1])# 输出最新文件的目录
# """修改word文档字体大小"""
# document = Document(rf"{x}")
# tables = document.tables
# style = document.styles['Normal']
# font = style.font
# font.name = 'Calibri'
# font.size = Pt(10)
# document.save(rf"{x}")
return x
def deal():
docx_path = f'{duqu()}'
# 先将要处理的word文档用zipfile进行压缩
word = zipfile.ZipFile(docx_path)
# 找到要处理的xml文件并以utf-8的格式读取
xml = word.read('word/document.xml').decode('utf-8')
# 接下来分割字符串并存储到列表中
xml_list = xml.split('<w:t>')# 以字符串<w:t>进行分割字符串
# print(xml_list)# 列表内容 # print(type(xml_list))# 是列表
# 开始切片,找标签</w:t>
text_list = []# 新建空list用以存储切出来的数据
# 开始循环读取列表xml_list
for i in xml_list:
# 条件查找
if i.find('</w:t>') + 1:# 切片查找是如果没找到是会返回-1,我们+1让他返回0,再运行else分支
text_list.append(i[:i.find('</w:t>')])# 如果不是返回0就把找到的依次追加到text_list末尾
a_list = text_list
#各种删除筛选
del a_list
a1_list = re.sub('\+08:00', '', ''.join(a_list))
a2_list = re.sub(r'[\u4e00-\u9fa5]{2} \([\u4e00-\u9fa5]{2}\)', ',', ''.join(a1_list))
a3_list = re.sub('\d+.\W\D\D\D.S', ',', ''.join(a2_list))
for i in a_list:# 筛选数据
if i == '系统 (系统)':
a_list.remove(i)
m1 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..\d+-+.S.[\u4e00-\u9fa5]{2})')
m1 = m1.findall(str(a_list))
m2 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{2}\d+.S.[\u4e00-\u9fa5]{2})')
m2 = m2.findall(str(a_list))
m3 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{3}\d+.S.[\u4e00-\u9fa5]{2})')
m3 = m3.findall(str(a_list))
m = m1 + m2 + m3
m = re.sub('(\+08:00)', '', ''.join(m))
m = re.sub('\d+-+.S', '', ''.join(m))
m = re.sub('[\u4e00-\u9fa5]{3}\d+..', '', ''.join(m))
m = re.sub('[\u4e00-\u9fa5]{2}\d+..', '', ''.join(m))
m = m.replace(" 开始'", "开始,")
m = m.replace(" 完成'", "完成,")
m = m.replace(" 暂停'", "暂停,")
m = m.replace("' ", "")
m = m.replace("'", "")
m = m.replace(", ", ",")
m = m.split(',')
# 转换为字典
l1 = m[::2]
l2 = m
d1 = zip(l1, l2)
d1 = dict(d1)
# value = list(d1.values())# 获取字典VALUE
ey = list(d1)# 获取字典key
ey = datetime.strptime(ey, '%Y-%m-%d %H:%M:%S')
ey1 = list(d1)[-1]
ey1 = datetime.strptime(ey1, '%Y-%m-%d %H:%M:%S')
filetime = ey - ey1
new_sys1 = sorted(d1.items(), key=lambda d: d, reverse=False)
df = pd.DataFrame(new_sys1, columns=['time', 'flag'])
df = df.astype({'time': 'datetime64'})
df0 = df.sort_values('time').reset_index(drop=True)
df1 = df.sort_values('time').reset_index(drop=True).shift()
res = pd.concat(, axis=1)
res.columns = ['t1', 'f1', 't2', 'f2']
result = res[((res.f1 == '暂停') & (res.f2 == '开始')) |
((res.f1 == '完成') & (res.f2 == '开始'))].loc[:]
result['used_time'] = result.t1 - result.t2
result.agg({'used_time': sum}, )
action_time = (result.agg({'used_time': sum}, ) / filetime)# 设备使用时间/表内时间
action_time = str(action_time)# 转为字符串取出数字
action_time1 = re.findall(r"0.\d\d", action_time)
action_time1 = ' '.join(action_time1)# 列表去掉[]与引号
action_time1 = float(action_time1)
action_time1 = "%.2f%%" % (action_time1 * 100)# 转换为百分比
month = duqu()# 取出文件名称
month = re.findall("\d+\.?\d*", month)
month = ' '.join(month)
print(result.agg)
print('设备运行时间', result.agg({'used_time': sum}, ))
print(f'{month}月设备使用率', action_time1)
print(f'表{month}的开始时间:', ey1)
print(f'表{month}的结束时间:', ey)
print(f'表{month}的内总时间:', filetime)
#日志生成
log_print = open(f'{month}设备使用率.log', 'w')
sys.stdout = log_print
sys.stderr = log_print
if __name__ == '__main__':
duqu()
deal()
print(duqu())
print(deal())</font>
这是自己把自己马上天呐
页:
[1]