鱼C论坛

 找回密码
 立即注册
查看: 2192|回复: 2

[已解决]小白求助:求大哥修改一下这堆臭狗屎

[复制链接]
发表于 2022-8-31 15:10:09 | 显示全部楼层 |阅读模式
30鱼币
本帖最后由 任申猴 于 2022-8-31 15:10 编辑

我东拼西凑的狗屎代码
  1. # -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. import re
  5. import zipfile  # 解压文件库
  6. import pandas as pd
  7. from docx import Document
  8. from docx.shared import Cm, Pt
  9. import datetime
  10. import time
  11. from datetime import datetime


  12. def duqu():
  13.     """读取文件夹最新改动的文件"""
  14.     dir = r'C:\Users\admin\Desktop\新建文件夹'
  15.     # a = os.path.getatime(dir)  # 输出最近访问时间
  16.     # b = os.path.getctime(dir)  # 输出文件创建时间
  17.     # c = os.path.getmtime(dir)  # 输出最近修改时间
  18.     d = time.gmtime(os.path.getmtime(dir))  # 以struct_time形式输出最近修改时间
  19.     file_lists = os.listdir(dir)  # 输出文件夹下目录      print(file_lists[-1])  # 输出最新文件
  20.     file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\" + fn)
  21.     if not os.path.isdir(dir + "\" + fn) else 0)
  22.     x = os.path.join(dir, file_lists[-1])  # 输出最新文件的目录

  23.     # """修改word文档字体大小"""
  24.     # document = Document(rf"{x}")
  25.     # tables = document.tables[0]
  26.     # style = document.styles['Normal']
  27.     # font = style.font
  28.     # font.name = 'Calibri'
  29.     # font.size = Pt(10)
  30.     # document.save(rf"{x}")

  31.     return x


  32. def deal():
  33.     docx_path = f'{duqu()}'
  34.     # 先将要处理的word文档用zipfile进行压缩
  35.     word = zipfile.ZipFile(docx_path)
  36.     # 找到要处理的xml文件并以utf-8的格式读取
  37.     xml = word.read('word/document.xml').decode('utf-8')
  38.     # 接下来分割字符串并存储到列表中
  39.     xml_list = xml.split('<w:t>')  # 以字符串<w:t>进行分割字符串
  40.     # print(xml_list)  # 列表内容    # print(type(xml_list))  # 是列表
  41.     # 开始切片,找标签</w:t>
  42.     text_list = []  # 新建空list用以存储切出来的数据
  43.     # 开始循环读取列表xml_list
  44.     for i in xml_list:
  45.         # 条件查找
  46.         if i.find('</w:t>') + 1:  # 切片查找是如果没找到是会返回-1,我们+1让他返回0,再运行else分支
  47.             text_list.append(i[:i.find('</w:t>')])  # 如果不是返回0就把找到的依次追加到text_list末尾
  48.     a_list = text_list
  49.     """各种删除筛选"""
  50.     del a_list[0:20]
  51.     a1_list = re.sub('\+08:00', '', ''.join(a_list))
  52.     a2_list = re.sub(r'[\u4e00-\u9fa5]{2} \([\u4e00-\u9fa5]{2}\)', ',', ''.join(a1_list))
  53.     a3_list = re.sub('\d+.\W\D\D\D.S', ',', ''.join(a2_list))
  54.     for i in a_list:  # 筛选数据
  55.         if i == '系统 (系统)':
  56.             a_list.remove(i)
  57.     m1 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..\d+-[a-zA-Z]+.S.[\u4e00-\u9fa5]{2})')
  58.     m1 = m1.findall(str(a_list))
  59.     m2 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{2}\d+.S.[\u4e00-\u9fa5]{2})')
  60.     m2 = m2.findall(str(a_list))
  61.     m3 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{3}\d+.S.[\u4e00-\u9fa5]{2})')
  62.     m3 = m3.findall(str(a_list))
  63.     m = m1 + m2 + m3
  64.     m = re.sub('(\+08:00)', '', ''.join(m))
  65.     m = re.sub('\d+-[a-zA-Z]+.S', '', ''.join(m))
  66.     m = re.sub('[\u4e00-\u9fa5]{3}\d+..', '', ''.join(m))
  67.     m = re.sub('[\u4e00-\u9fa5]{2}\d+..', '', ''.join(m))
  68.     m = m.replace(" 开始'", "开始,")
  69.     m = m.replace(" 完成'", "完成,")
  70.     m = m.replace(" 暂停'", "暂停,")
  71.     m = m.replace("' ", "")
  72.     m = m.replace("'", "")
  73.     m = m.replace(", ", ",")
  74.     m = m.split(',')
  75.     # 转换为字典
  76.     l1 = m[::2]
  77.     l2 = m[1::2]
  78.     d1 = zip(l1, l2)
  79.     d1 = dict(d1)
  80.     # value = list(d1.values())[0]  # 获取字典VALUE
  81.     ey = list(d1)[0]  # 获取字典key
  82.     ey = datetime.strptime(ey, '%Y-%m-%d %H:%M:%S')
  83.     ey1 = list(d1)[-1]
  84.     ey1 = datetime.strptime(ey1, '%Y-%m-%d %H:%M:%S')
  85.     filetime = ey - ey1


  86.     new_sys1 = sorted(d1.items(), key=lambda d: d[0], reverse=False)

  87.     df = pd.DataFrame(new_sys1, columns=['time', 'flag'])
  88.     df = df.astype({'time': 'datetime64'})

  89.     df0 = df.sort_values('time').reset_index(drop=True)
  90.     df1 = df.sort_values('time').reset_index(drop=True).shift()

  91.     res = pd.concat([df0, df1], axis=1)
  92.     res.columns = ['t1', 'f1', 't2', 'f2']

  93.     result = res[((res.f1 == '暂停') & (res.f2 == '开始')) |
  94.                  ((res.f1 == '完成') & (res.f2 == '开始'))].loc[:]
  95.     result['used_time'] = result.t1 - result.t2
  96.     result.agg({'used_time': sum}, )

  97.     action_time = (result.agg({'used_time': sum}, ) / filetime)  # 设备使用时间/表内时间
  98.     action_time = str(action_time)  # 转为字符串  取出数字
  99.     action_time1 = re.findall(r"0.\d\d", action_time)
  100.     action_time1 = ' '.join(action_time1)  # 列表去掉[]与引号
  101.     action_time1 = float(action_time1)
  102.     action_time1 = "%.2f%%" % (action_time1 * 100)  # 转换为百分比

  103.     month = duqu()  # 取出文件名称
  104.     month = re.findall("\d+\.?\d*", month)
  105.     month = ' '.join(month)

  106.     print(result.agg)
  107.     print('设备运行时间', result.agg({'used_time': sum}, ))
  108.     print(f'{month}月设备使用率', action_time1)
  109.     print(f'表{month}的开始时间:', ey1)
  110.     print(f'表{month}的结束时间:', ey)
  111.     print(f'表{month}的内总时间:', filetime)
  112.     """日志生成"""
  113.     log_print = open(f'{month}设备使用率.log', 'w')
  114.     sys.stdout = log_print
  115.     sys.stderr = log_print


  116. if __name__ == '__main__':
  117.     duqu()
  118.     deal()
  119.     print(duqu())
  120.     print(deal())
复制代码


运行结果

  1. C:\Users\admin\PycharmProjects\python-办公\venv\Scripts\python.exe C:/Users/admin/Desktop/A.py
  2. <bound method DataFrame.aggregate of                    t1  f1                  t2  f2       used_time
  3. 2 2022-06-28 21:22:12  完成 2022-06-28 20:36:11  开始 0 days 00:46:01
  4. 4 2022-06-29 19:38:53  暂停 2022-06-28 22:00:28  开始 0 days 21:38:25
  5. 6 2022-06-30 10:06:34  完成 2022-06-29 20:36:31  开始 0 days 13:30:03
  6. 8 2022-06-30 13:24:35  完成 2022-06-30 10:57:16  开始 0 days 02:27:19>
  7. 设备运行时间 used_time   1 days 14:21:48
  8. dtype: timedelta64[ns]
  9. 1.月设备使用率 54.00%
  10. 表1.的开始时间: 2022-06-28 20:06:02
  11. 表1.的结束时间: 2022-07-01 18:31:57
  12. 表1.的内总时间: 2 days, 22:25:55

  13. 进程已结束,退出代码0
复制代码


word文档读取出来的数据
  1. C:\Users\admin\PycharmProjects\python-办公\venv\Scripts\python.exe C:/Users/admin/Desktop/A.py
  2. ['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', '系统 (系统)', '活动日志已启用']

  3. 进程已结束,退出代码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:求大哥不要只说思路   整不明白   

最佳答案
2022-8-31 15:10:10
  1. <font face="楷体, 楷体_GB2312"># -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. import re
  5. import zipfile  # 解压文件库
  6. import pandas as pd
  7. from docx import Document
  8. from docx.shared import Cm, Pt
  9. import datetime
  10. import time
  11. from datetime import datetime


  12. def duqu():
  13.     """读取文件夹最新改动的文件"""
  14.     dir = r'C:\Users\admin\Desktop\新建文件夹'
  15.     # a = os.path.getatime(dir)  # 输出最近访问时间
  16.     # b = os.path.getctime(dir)  # 输出文件创建时间
  17.     # c = os.path.getmtime(dir)  # 输出最近修改时间
  18.     d = time.gmtime(os.path.getmtime(dir))  # 以struct_time形式输出最近修改时间
  19.     file_lists = os.listdir(dir)  # 输出文件夹下目录      print(file_lists[-1])  # 输出最新文件
  20.     file_lists.sort(key=lambda fn: os.path.getmtime(dir + "" + fn)
  21.     if not os.path.isdir(dir + "" + fn) else 0)
  22.     x = os.path.join(dir, file_lists[-1])  # 输出最新文件的目录

  23.     # """修改word文档字体大小"""
  24.     # document = Document(rf"{x}")
  25.     # tables = document.tables[0]
  26.     # style = document.styles['Normal']
  27.     # font = style.font
  28.     # font.name = 'Calibri'
  29.     # font.size = Pt(10)
  30.     # document.save(rf"{x}")

  31.     return x


  32. def deal():
  33.     docx_path = f'{duqu()}'
  34.     # 先将要处理的word文档用zipfile进行压缩
  35.     word = zipfile.ZipFile(docx_path)
  36.     # 找到要处理的xml文件并以utf-8的格式读取
  37.     xml = word.read('word/document.xml').decode('utf-8')
  38.     # 接下来分割字符串并存储到列表中
  39.     xml_list = xml.split('<w:t>')  # 以字符串<w:t>进行分割字符串
  40.     # print(xml_list)  # 列表内容    # print(type(xml_list))  # 是列表
  41.     # 开始切片,找标签</w:t>
  42.     text_list = []  # 新建空list用以存储切出来的数据
  43.     # 开始循环读取列表xml_list
  44.     for i in xml_list:
  45.         # 条件查找
  46.         if i.find('</w:t>') + 1:  # 切片查找是如果没找到是会返回-1,我们+1让他返回0,再运行else分支
  47.             text_list.append(i[:i.find('</w:t>')])  # 如果不是返回0就把找到的依次追加到text_list末尾
  48.     a_list = text_list
  49.     #各种删除筛选
  50.     del a_list[0:20]
  51.     a1_list = re.sub('\+08:00', '', ''.join(a_list))
  52.     a2_list = re.sub(r'[\u4e00-\u9fa5]{2} \([\u4e00-\u9fa5]{2}\)', ',', ''.join(a1_list))
  53.     a3_list = re.sub('\d+.\W\D\D\D.S', ',', ''.join(a2_list))
  54.     for i in a_list:  # 筛选数据
  55.         if i == '系统 (系统)':
  56.             a_list.remove(i)
  57.     m1 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..\d+-[a-zA-Z]+.S.[\u4e00-\u9fa5]{2})')
  58.     m1 = m1.findall(str(a_list))
  59.     m2 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{2}\d+.S.[\u4e00-\u9fa5]{2})')
  60.     m2 = m2.findall(str(a_list))
  61.     m3 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{3}\d+.S.[\u4e00-\u9fa5]{2})')
  62.     m3 = m3.findall(str(a_list))
  63.     m = m1 + m2 + m3
  64.     m = re.sub('(\+08:00)', '', ''.join(m))
  65.     m = re.sub('\d+-[a-zA-Z]+.S', '', ''.join(m))
  66.     m = re.sub('[\u4e00-\u9fa5]{3}\d+..', '', ''.join(m))
  67.     m = re.sub('[\u4e00-\u9fa5]{2}\d+..', '', ''.join(m))
  68.     m = m.replace(" 开始'", "开始,")
  69.     m = m.replace(" 完成'", "完成,")
  70.     m = m.replace(" 暂停'", "暂停,")
  71.     m = m.replace("' ", "")
  72.     m = m.replace("'", "")
  73.     m = m.replace(", ", ",")
  74.     m = m.split(',')
  75.     # 转换为字典
  76.     l1 = m[::2]
  77.     l2 = m[1::2]
  78.     d1 = zip(l1, l2)
  79.     d1 = dict(d1)
  80.     # value = list(d1.values())[0]  # 获取字典VALUE
  81.     ey = list(d1)[0]  # 获取字典key
  82.     ey = datetime.strptime(ey, '%Y-%m-%d %H:%M:%S')
  83.     ey1 = list(d1)[-1]
  84.     ey1 = datetime.strptime(ey1, '%Y-%m-%d %H:%M:%S')
  85.     filetime = ey - ey1


  86.     new_sys1 = sorted(d1.items(), key=lambda d: d[0], reverse=False)

  87.     df = pd.DataFrame(new_sys1, columns=['time', 'flag'])
  88.     df = df.astype({'time': 'datetime64'})

  89.     df0 = df.sort_values('time').reset_index(drop=True)
  90.     df1 = df.sort_values('time').reset_index(drop=True).shift()

  91.     res = pd.concat([df0, df1], axis=1)
  92.     res.columns = ['t1', 'f1', 't2', 'f2']

  93.     result = res[((res.f1 == '暂停') & (res.f2 == '开始')) |
  94.                  ((res.f1 == '完成') & (res.f2 == '开始'))].loc[:]
  95.     result['used_time'] = result.t1 - result.t2
  96.     result.agg({'used_time': sum}, )

  97.     action_time = (result.agg({'used_time': sum}, ) / filetime)  # 设备使用时间/表内时间
  98.     action_time = str(action_time)  # 转为字符串  取出数字
  99.     action_time1 = re.findall(r"0.\d\d", action_time)
  100.     action_time1 = ' '.join(action_time1)  # 列表去掉[]与引号
  101.     action_time1 = float(action_time1)
  102.     action_time1 = "%.2f%%" % (action_time1 * 100)  # 转换为百分比

  103.     month = duqu()  # 取出文件名称
  104.     month = re.findall("\d+\.?\d*", month)
  105.     month = ' '.join(month)

  106.     print(result.agg)
  107.     print('设备运行时间', result.agg({'used_time': sum}, ))
  108.     print(f'{month}月设备使用率', action_time1)
  109.     print(f'表{month}的开始时间:', ey1)
  110.     print(f'表{month}的结束时间:', ey)
  111.     print(f'表{month}的内总时间:', filetime)
  112.     #日志生成
  113.     log_print = open(f'{month}设备使用率.log', 'w')
  114.     sys.stdout = log_print
  115.     sys.stderr = log_print


  116. if __name__ == '__main__':
  117.     duqu()
  118.     deal()
  119.     print(duqu())
  120.     print(deal())</font>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-31 15:10:10 | 显示全部楼层    本楼为最佳答案   
  1. <font face="楷体, 楷体_GB2312"># -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. import re
  5. import zipfile  # 解压文件库
  6. import pandas as pd
  7. from docx import Document
  8. from docx.shared import Cm, Pt
  9. import datetime
  10. import time
  11. from datetime import datetime


  12. def duqu():
  13.     """读取文件夹最新改动的文件"""
  14.     dir = r'C:\Users\admin\Desktop\新建文件夹'
  15.     # a = os.path.getatime(dir)  # 输出最近访问时间
  16.     # b = os.path.getctime(dir)  # 输出文件创建时间
  17.     # c = os.path.getmtime(dir)  # 输出最近修改时间
  18.     d = time.gmtime(os.path.getmtime(dir))  # 以struct_time形式输出最近修改时间
  19.     file_lists = os.listdir(dir)  # 输出文件夹下目录      print(file_lists[-1])  # 输出最新文件
  20.     file_lists.sort(key=lambda fn: os.path.getmtime(dir + "" + fn)
  21.     if not os.path.isdir(dir + "" + fn) else 0)
  22.     x = os.path.join(dir, file_lists[-1])  # 输出最新文件的目录

  23.     # """修改word文档字体大小"""
  24.     # document = Document(rf"{x}")
  25.     # tables = document.tables[0]
  26.     # style = document.styles['Normal']
  27.     # font = style.font
  28.     # font.name = 'Calibri'
  29.     # font.size = Pt(10)
  30.     # document.save(rf"{x}")

  31.     return x


  32. def deal():
  33.     docx_path = f'{duqu()}'
  34.     # 先将要处理的word文档用zipfile进行压缩
  35.     word = zipfile.ZipFile(docx_path)
  36.     # 找到要处理的xml文件并以utf-8的格式读取
  37.     xml = word.read('word/document.xml').decode('utf-8')
  38.     # 接下来分割字符串并存储到列表中
  39.     xml_list = xml.split('<w:t>')  # 以字符串<w:t>进行分割字符串
  40.     # print(xml_list)  # 列表内容    # print(type(xml_list))  # 是列表
  41.     # 开始切片,找标签</w:t>
  42.     text_list = []  # 新建空list用以存储切出来的数据
  43.     # 开始循环读取列表xml_list
  44.     for i in xml_list:
  45.         # 条件查找
  46.         if i.find('</w:t>') + 1:  # 切片查找是如果没找到是会返回-1,我们+1让他返回0,再运行else分支
  47.             text_list.append(i[:i.find('</w:t>')])  # 如果不是返回0就把找到的依次追加到text_list末尾
  48.     a_list = text_list
  49.     #各种删除筛选
  50.     del a_list[0:20]
  51.     a1_list = re.sub('\+08:00', '', ''.join(a_list))
  52.     a2_list = re.sub(r'[\u4e00-\u9fa5]{2} \([\u4e00-\u9fa5]{2}\)', ',', ''.join(a1_list))
  53.     a3_list = re.sub('\d+.\W\D\D\D.S', ',', ''.join(a2_list))
  54.     for i in a_list:  # 筛选数据
  55.         if i == '系统 (系统)':
  56.             a_list.remove(i)
  57.     m1 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..\d+-[a-zA-Z]+.S.[\u4e00-\u9fa5]{2})')
  58.     m1 = m1.findall(str(a_list))
  59.     m2 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{2}\d+.S.[\u4e00-\u9fa5]{2})')
  60.     m2 = m2.findall(str(a_list))
  61.     m3 = re.compile('(.\d+-\d+-\d+.\d+:\d+:\d+\+08:00.,..[\u4e00-\u9fa5]{3}\d+.S.[\u4e00-\u9fa5]{2})')
  62.     m3 = m3.findall(str(a_list))
  63.     m = m1 + m2 + m3
  64.     m = re.sub('(\+08:00)', '', ''.join(m))
  65.     m = re.sub('\d+-[a-zA-Z]+.S', '', ''.join(m))
  66.     m = re.sub('[\u4e00-\u9fa5]{3}\d+..', '', ''.join(m))
  67.     m = re.sub('[\u4e00-\u9fa5]{2}\d+..', '', ''.join(m))
  68.     m = m.replace(" 开始'", "开始,")
  69.     m = m.replace(" 完成'", "完成,")
  70.     m = m.replace(" 暂停'", "暂停,")
  71.     m = m.replace("' ", "")
  72.     m = m.replace("'", "")
  73.     m = m.replace(", ", ",")
  74.     m = m.split(',')
  75.     # 转换为字典
  76.     l1 = m[::2]
  77.     l2 = m[1::2]
  78.     d1 = zip(l1, l2)
  79.     d1 = dict(d1)
  80.     # value = list(d1.values())[0]  # 获取字典VALUE
  81.     ey = list(d1)[0]  # 获取字典key
  82.     ey = datetime.strptime(ey, '%Y-%m-%d %H:%M:%S')
  83.     ey1 = list(d1)[-1]
  84.     ey1 = datetime.strptime(ey1, '%Y-%m-%d %H:%M:%S')
  85.     filetime = ey - ey1


  86.     new_sys1 = sorted(d1.items(), key=lambda d: d[0], reverse=False)

  87.     df = pd.DataFrame(new_sys1, columns=['time', 'flag'])
  88.     df = df.astype({'time': 'datetime64'})

  89.     df0 = df.sort_values('time').reset_index(drop=True)
  90.     df1 = df.sort_values('time').reset_index(drop=True).shift()

  91.     res = pd.concat([df0, df1], axis=1)
  92.     res.columns = ['t1', 'f1', 't2', 'f2']

  93.     result = res[((res.f1 == '暂停') & (res.f2 == '开始')) |
  94.                  ((res.f1 == '完成') & (res.f2 == '开始'))].loc[:]
  95.     result['used_time'] = result.t1 - result.t2
  96.     result.agg({'used_time': sum}, )

  97.     action_time = (result.agg({'used_time': sum}, ) / filetime)  # 设备使用时间/表内时间
  98.     action_time = str(action_time)  # 转为字符串  取出数字
  99.     action_time1 = re.findall(r"0.\d\d", action_time)
  100.     action_time1 = ' '.join(action_time1)  # 列表去掉[]与引号
  101.     action_time1 = float(action_time1)
  102.     action_time1 = "%.2f%%" % (action_time1 * 100)  # 转换为百分比

  103.     month = duqu()  # 取出文件名称
  104.     month = re.findall("\d+\.?\d*", month)
  105.     month = ' '.join(month)

  106.     print(result.agg)
  107.     print('设备运行时间', result.agg({'used_time': sum}, ))
  108.     print(f'{month}月设备使用率', action_time1)
  109.     print(f'表{month}的开始时间:', ey1)
  110.     print(f'表{month}的结束时间:', ey)
  111.     print(f'表{month}的内总时间:', filetime)
  112.     #日志生成
  113.     log_print = open(f'{month}设备使用率.log', 'w')
  114.     sys.stdout = log_print
  115.     sys.stderr = log_print


  116. if __name__ == '__main__':
  117.     duqu()
  118.     deal()
  119.     print(duqu())
  120.     print(deal())</font>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-1 13:31:17 | 显示全部楼层
这是自己把自己马上天呐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-1 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表