python_计算时间差统计数据丢失情况

计算文件中相邻两行的时间差,统计数据丢失的情况,并写入文件中

# 分析outpos的gga数据丢失情况
import os
import matplotlib.pyplot as plt
from datetime import datetime
from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialogplt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置显示中文字体
plt.rcParams["axes.unicode_minus"] = False  # 设置正常显示符号# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
# os.environ["CUDA_VISIBLE_DEVICES"] = "1"class MyDialog(QDialog):def __init__(self, parent=None):super(MyDialog, self).__init__(parent)self.setWindowTitle('outpos数据丢失')self.setGeometry(100, 100, 200, 200)# 创建垂直布局管理器layout = QVBoxLayout()# 创建文件选择框label3 = QLabel('请点击浏览按钮,选择outpos的pos文件;\n再点击执行按钮,输出定位结果的数据丢失情况。', self)layout.addWidget(label3)self.file_input1 = QPushButton('浏览...', self)layout.addWidget(self.file_input1)self.file_input1.clicked.connect(self.open_file_dialog1)# 添加确认执行按钮self.ok_button = QPushButton('执行', self)self.ok_button.clicked.connect(self.execute)layout.addWidget(self.ok_button)# 将布局设置为主窗口的布局self.setLayout(layout)def open_file_dialog1(self):file_dialog = QFileDialog(self)file_dialog.setFileMode(QFileDialog.ExistingFiles)if file_dialog.exec_():file_paths = file_dialog.selectedFiles()merged_filename = ""if len(file_paths) > 1:# 获取第一个文件的目录和文件名,用于创建合并后的文件名directory = os.path.dirname(file_paths[0])filename = os.path.splitext(os.path.basename(file_paths[0]))[0]merged_filename = os.path.join(directory, f'{filename}_merged').replace('\\', '/')with open(merged_filename, 'w') as merged_file:for path in file_paths:with open(path, 'r') as file:merged_file.write(file.read())merged_file.write('\n')  # 在每个文件之间添加换行符elif len(file_paths) == 1:merged_filename = file_pathselse:print('Please select files.')if merged_filename:self.file_input1.setText(''.join(merged_filename))def execute(self):# 执行操作,可以在这里处理输入框和文件选择框的内容file_path_s = self.file_input1.text()# 结果存放文件file_dir = os.path.dirname(file_path_s)file_name = os.path.basename(file_path_s).split('.')[0]t = datetime.now().strftime("%m%d%H%M")file_path_d = os.path.join(file_dir, file_name + '_' + t + '.txt')with open(file_path_s, 'r', encoding="utf-8", errors="ignore") as file, open(file_path_d, 'w') as result_file:# 跳过GPST文件头,从第三行开始lines = file.readlines()[2:]for index, line in enumerate(lines):# 跳过最后一行的比较,避免出现IndexError: list index out of range# enumerate索引的起始位置默认为0,所以需要减1if index < len(lines) - 1:# 分别切割相邻的两行数据co_st = line.strip().split(' ')co_en = lines[index + 1].strip().split(' ')# 确保有至少两列,组成年月日时分秒格式,并拼接成新的字符串if len(co_st) >= 2 and len(co_en) >= 2:st = co_st[0] + ' ' + co_st[1]et = co_en[0] + ' ' + co_en[1]# 时间格式化start_time = datetime.strptime(st, '%Y/%m/%d %H:%M:%S.%f')end_time = datetime.strptime(et, '%Y/%m/%d %H:%M:%S.%f')dif = end_time - start_time# hour, min, sec = str(dif).split(':')sec = dif.total_seconds()# 差值不等于1,说明历元丢失if sec != 1:result = st + ' > ' + et + ' 之间丢失 ' + str(int(sec - 1)) + ' 个数据'# print(f"{st} > {et} 之间丢失 {int(sec - 1)} 个历元")print(result)result_file.writelines(result + "\n")if __name__ == '__main__':import sysapp = QApplication(sys.argv)dialog = MyDialog()# 解决子窗口不能操作的问题dialog.show()dialog.exec_()

加入开始、结束时间等;

# 分析outpos的gga数据丢失情况
import os
import matplotlib.pyplot as plt
from datetime import datetime
from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QPushButton, QFileDialogplt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置显示中文字体
plt.rcParams["axes.unicode_minus"] = False  # 设置正常显示符号# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
# os.environ["CUDA_VISIBLE_DEVICES"] = "1"class MyDialog(QDialog):def __init__(self, parent=None):super(MyDialog, self).__init__(parent)self.setWindowTitle('outpos数据丢失')self.setGeometry(100, 100, 200, 200)# 创建垂直布局管理器layout = QVBoxLayout()# 创建文件选择框label3 = QLabel('请点击浏览按钮,选择outpos的pos文件;\n再点击执行按钮,输出定位结果的数据丢失情况。', self)layout.addWidget(label3)self.file_input1 = QPushButton('浏览...', self)layout.addWidget(self.file_input1)self.file_input1.clicked.connect(self.open_file_dialog1)# 添加确认执行按钮self.ok_button = QPushButton('执行', self)self.ok_button.clicked.connect(self.execute)layout.addWidget(self.ok_button)# 将布局设置为主窗口的布局self.setLayout(layout)def open_file_dialog1(self):file_dialog = QFileDialog(self)file_dialog.setFileMode(QFileDialog.ExistingFiles)if file_dialog.exec_():file_paths = file_dialog.selectedFiles()merged_filename = ""if len(file_paths) > 1:# 获取第一个文件的目录和文件名,用于创建合并后的文件名directory = os.path.dirname(file_paths[0])filename = os.path.splitext(os.path.basename(file_paths[0]))[0]merged_filename = os.path.join(directory, f'{filename}_merged').replace('\\', '/')with open(merged_filename, 'w') as merged_file:for path in file_paths:with open(path, 'r') as file:merged_file.write(file.read())merged_file.write('\n')  # 在每个文件之间添加换行符elif len(file_paths) == 1:merged_filename = file_pathselse:print('Please select files.')if merged_filename:self.file_input1.setText(''.join(merged_filename))def execute(self):# 执行操作,可以在这里处理输入框和文件选择框的内容file_path_s = self.file_input1.text()# 结果存放文件file_dir = os.path.dirname(file_path_s)file_name = os.path.basename(file_path_s).split('.')[0]t = datetime.now().strftime("%m%d%H%M")file_path_d = os.path.join(file_dir, file_name + '_' + t + '.txt')with open(file_path_s, 'r', encoding="utf-8", errors="ignore") as file, open(file_path_d, 'w') as result_file:# 跳过GPST文件头,从第三行开始lines = file.readlines()[2:]ll = len(lines)for index, line in enumerate(lines):# 跳过最后一行的比较,避免出现IndexError: list index out of range# enumerate索引的起始位置默认为0,所以需要减1if index < ll - 1:# 分别切割相邻的两行数据co_st = line.strip().split(' ')co_en = lines[index + 1].strip().split(' ')# 确保有至少两列,组成年月日时分秒格式,并拼接成新的字符串if len(co_st) >= 2 and len(co_en) >= 2:st = co_st[0] + ' ' + co_st[1]et = co_en[0] + ' ' + co_en[1]# 时间格式化start_time = datetime.strptime(st, '%Y/%m/%d %H:%M:%S.%f')end_time = datetime.strptime(et, '%Y/%m/%d %H:%M:%S.%f')# 起始时间if index == 0:result_s = '起始时间:' + stfirst = start_time# 计算时间差dif = end_time - start_time# hour, min, sec = str(dif).split(':')sec = dif.total_seconds()# 差值不等于1,说明数据丢失if sec != 1:result = st + ' > ' + et + ' 之间丢失 ' + str(int(sec - 1)) + ' 个数据'# print(f"{st} > {et} 之间丢失 {int(sec - 1)} 个历元")print(result)result_file.writelines(result + "\n")# 结束时间if index == ll - 2:# 计算整体的时间差all_dif = end_time - firstall_sec = int(all_dif.total_seconds()) + 1all_rate = round((all_sec - ll) / all_sec * 100, 2)result_e = '结束时间:' + et + '\n' + '理论数量:' + str(all_sec) + '\n' + '丢失数量:' + str(all_sec - ll) + '\n' + '丢失率:' + str(all_rate) + '%'print(result_s + '\n' + result_e)result_file.writelines(result_s + "\n")result_file.writelines(result_e + "\n")if __name__ == '__main__':import sysapp = QApplication(sys.argv)dialog = MyDialog()# 解决子窗口不能操作的问题dialog.show()dialog.exec_()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maya 白膜渲染简单教程

零基础渲染小白&#xff0c;没关系&#xff0c;一篇超简单教程带你学会渲染白膜。 先打开Maya&#xff0c;看看面板有没有渲染器&#xff0c;这里以Arnold为主。 要是没有这个&#xff0c;就去找插件管理器&#xff0c; Arnold的是mtoa&#xff0c;在搜索栏搜&#xff0c;然后把…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -3

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共30个基础CAN函数&#xff1b; 该文章只梳理常规CAN&#xff0c;增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

未来科技:Web3如何重塑物联网生态系统

随着Web3技术的崛起&#xff0c;物联网&#xff08;IoT&#xff09;的发展正迎来一场深刻的变革。本文将深入探讨Web3如何重塑物联网生态系统&#xff0c;从技术原理到应用实例&#xff0c;全面解析其对未来科技发展的影响和潜力。 1. Web3技术简介与发展背景 Web3技术是建立在…

【C语言】信号

【C语言】信号 信号1. 信号状态2. 信号处理方式3. 信号注册相关函数4. 信号集相关函数 最后 信号 1. 信号状态 信号有三种状态&#xff1a;产生、未决和递达 信号产生方式&#xff1a; 按键产生&#xff0c;ctrlc 产生 中断信号SIGINT&#xff0c;ctrl \ 产生退出信号 SIG…

ABSD-系统架构师(十三)

1、CDN和反向代理的基本原理都是&#xff08;&#xff09;。 A缓存 B负载均衡 C路由转发 DNAT转发 答案&#xff1a;A 2、&#xff08;必考&#xff09;在ABSD&#xff08;基于架构的软件开发&#xff09;方法中&#xff0c;顶层被分解为&#xff08;&#xff09;&#xff…

【odoo17】前端中的防抖函数

概要 在Odoo前端开发中&#xff0c;防抖&#xff08;Debounce&#xff09;技术是一种用于优化性能和提升用户体验的技术。防抖主要用于限制高频事件的触发&#xff0c;例如输入框的输入事件、窗口的调整大小事件或滚动事件。通过限制这些事件的频繁触发&#xff0c;可以减少不必…

PostgreSQL源码分析——索引扫描

这里&#xff0c;我们分析一下索引扫描的过程&#xff0c;以最简单的select * from t1 where a 100;语句为例&#xff0c;分析一下查询的过程。 postgrespostgres# \d t1;Table "public.t1"Column | Type | Collation | Nullable | Default ------------------…

a-select vModel时placeholder不显示问题

目录 a-select vModel时placeholder不显示问题 a-select vModel时placeholder不显示问题 问题描述&#xff1a;select 组件绑定了v-model和placeholder&#xff0c;v-model的value默认值为空字符串或者null时&#xff0c;select组件的placeholder属性不显示 <a-select v-m…

用小频谱仪观察收音机的本振

我找了一颗中周&#xff0c;想搭建一个几百khz的振荡电路&#xff0c;类似中波的本振&#xff0c;但是搭建了却看不到任何起振的波形。 遂想先看看已经装调好的中波收音机的本质波形是怎么样的&#xff1f; 用杜邦线加上一个夹子。把线夹到小频谱的天线杆上面。 取信号位置可…

windows实现python串口编程

一、windows安装python Welcome to Python.org 根据windows是64位找到对应的版本下载 下载完后直接安装即可&#xff01; 打开cmd查看python版本 $ python --version #查看版本 二、串口编程 1、安装pyserial库 pyserial是Python中的一个库,用于处理串口通信。 cmd…

ARM32开发——中断

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 中断概念中断分类中断触发条件 中断概念 中断是计算机系统中的一种机制&#xff0c;用于响应外部事件或内部事件,它可以使单片机暂…

former系列在时间序列预测任务上的研究综述

总&#xff1a;基于Transformer的LSTF解决方案 现有基于Transformer的LSTM解决方案设计要素总结如下&#xff1a; 从图中可以看出&#xff0c;Transformer在时序中应用具体包含以下几个步骤&#xff1a; 1&#xff09;时序分解&#xff1a;对于数据处理&#xff0c;TSF中0均…

5、分支对比 - 课件

一、基础知识 对比项双分支多分支多个if语句语法if-else语句if-else if-else语句多个独立的if语句分支数量只有两个分支可以有多个分支每个if语句都是一个独立的分支判断条件单一条件判断,结果为真或假按顺序判断多个条件,只执行第一个满足的分支每个if语句有独立的判断条件执…

OpenGL3.3_C++_Windows(6)

添加一个Editor camera /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/原理&#xff1a;接受用户输入&#xff08;鼠标&#xff0c;按键……&#xff09;&#xff0c;通过&#xff08;callback / 内置API&#xff09;获取差值 / 是否触发用户输入&…

极速查询:StarRocks 存算分离 Compaction 原理 调优指南

作者&#xff1a;丁凯&#xff0c;StarRocks TSC member/镜舟科技云原生技术负责人 StarRocks 在数据摄入过程中&#xff0c;每次操作都会创建一个新的数据版本。在查询时&#xff0c;为了得到准确的结果&#xff0c;必须将所有版本合并。然而&#xff0c;随着历史数据版本的累…

关于 MySQL 5.7 升级 8.0 时 INT 显示问题分析

本案例中的客户是从 MySQL 5.7.36 升级到 MySQL 8.0.35&#xff0c;升级完成后业务反馈表结构有变化&#xff0c;升级前某个表的字段数据类型为 INT(10)&#xff0c;升级后变成了 INT&#xff0c;客户咨询有什么影响没有&#xff1f; 作者&#xff1a;张昊&#xff0c;DBA&…

JavaScript日期对象、DOM节点操作(查找、增加、克隆、删除)

目录 1. 日期对象2. DOM节点操作2.1 查找节点2.2 增加节点2.3 克隆节点2.4 删除节点 1. 日期对象 实例化日期对象&#xff1a; 获取当前时间: new Date()获取指定时间: new Date(2023-12-1 17:12:08) 日期对象方法: 方法作用说明getFullYear()获得年份获取四位年份getMonth…

logback-spring.xml 小记

为什么不用logback.xml 名字 加载顺序:logback.xml>application.yml>logback-spring.xml 使用xml中使用到配置文件属性时,就会报错 为什么logback中记录不到运行时报错 logback获取不到堆栈错误 解决办法:在全局错误出使用log.error()指定输出 为什么打印不出来myba…

五大API接口:提升你的应用性能与用户体验

引言&#xff1a; 简述API接口的重要性引入API接口对于提升应用性能和用户体验的贡献 API接口简介&#xff1a; 定义&#xff1a;解释什么是API接口作用&#xff1a;概述API接口在软件开发中的作用 1. 数据访问API 功能描述&#xff1a;提供快速、安全的数据存取功能提升性…

“首秀”欧洲杯,海信冰箱欧洲市占率居国产品牌首位

随着欧洲杯的火热开赛&#xff0c;挑灯夜战、观看球赛的时刻已经来临。此时&#xff0c;你需要何物相伴&#xff1f;是打开冰箱&#xff0c;取出真空腌制的食材&#xff0c;亲手烹饪一场观赛盛宴&#xff1f;还是取出极致保鲜的荔枝、樱桃&#xff0c;一边观赛一边品味&#xf…