|
30鱼币
本帖最后由 任申猴 于 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[0]
- # 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[0:20]
- 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+-[a-zA-Z]+.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+-[a-zA-Z]+.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[1::2]
- d1 = zip(l1, l2)
- d1 = dict(d1)
- # value = list(d1.values())[0] # 获取字典VALUE
- ey = list(d1)[0] # 获取字典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[0], 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([df0, df1], 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 t1 f1 t2 f2 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[ns]
- 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[0]
- # 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[0:20]
- 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+-[a-zA-Z]+.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+-[a-zA-Z]+.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[1::2]
- d1 = zip(l1, l2)
- d1 = dict(d1)
- # value = list(d1.values())[0] # 获取字典VALUE
- ey = list(d1)[0] # 获取字典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[0], 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([df0, df1], 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>
复制代码
|
|