小工具:在指定的目录下,批量筛选出符合要求的gga或者pos文件。
import sys
import os
from datetime import datetime
from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QRadioButton
from PyQt5.QtCore import Qt
import time
import re
class InputDialog(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('批量筛选出匹配的gga&pos数据')
self.setGeometry(600, 600, 600, 200)
self.setWindowFlags(Qt.Dialog | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint)
layout = QVBoxLayout()
# self.radio_button1 = QRadioButton('gga', self)
# self.radio_button2 = QRadioButton('pos', self)
# self.radio_button1.setChecked(True)
# layout.addWidget(self.radio_button1)
# layout.addWidget(self.radio_button2)
label1 = QLabel('gga起始关键字,如090511.00,15,12,2023')
layout.addWidget(label1)
self.line_edit1 = QLineEdit()
self.line_edit1.setText("105441.00,13,12,2023")
layout.addWidget(self.line_edit1)
label2 = QLabel('gga截止关键字')
layout.addWidget(label2)
self.line_edit2 = QLineEdit()
self.line_edit2.setText("115441.00,13,12,2023")
layout.addWidget(self.line_edit2)
label3 = QLabel('pos起始关键字,如2023/12/15 09:05:29')
layout.addWidget(label3)
self.line_edit3 = QLineEdit()
self.line_edit3.setText("2023/12/13 10:55:12")
layout.addWidget(self.line_edit3)
label4 = QLabel('gga截止关键字')
layout.addWidget(label4)
self.line_edit4 = QLineEdit()
self.line_edit4.setText("2023/12/13 11:55:12")
layout.addWidget(self.line_edit4)
label5 = QLabel('日志文件路径:如,E:\data\\fortest\日志文件')
layout.addWidget(label5)
self.line_edit5 = QLineEdit()
self.line_edit5.setText(r'E:\data\fortest\日志文件')
layout.addWidget(self.line_edit5)
label6 = QLabel('结果存放路径:')
layout.addWidget(label6)
self.line_edit6 = QLineEdit()
self.line_edit6.setText(r'E:\data\fortest\日志文件')
layout.addWidget(self.line_edit6)
button = QPushButton('提取')
button.clicked.connect(self.submit)
layout.addWidget(button)
self.setLayout(layout)
def submit(self):
input1 = self.line_edit1.text()
input2 = self.line_edit2.text()
input3 = self.line_edit3.text()
input4 = self.line_edit4.text()
input5 = self.line_edit5.text()
input6 = self.line_edit6.text()
# if self.radio_button1.isChecked():
# option = 'gga'
# else:
# option = 'pos'
# self.function(input1, input2, option)
self.function(input1, input2, input3, input4, input5, input6)
def function(self, gga_start, gga_end, pos_start, pos_end, source_dir, target_dir):
for filename in os.listdir(source_dir):
# 构造文件的完整路径
file_path = os.path.join(source_dir, filename)
# 如果是文件,则计算
if os.path.isfile(file_path): # and "gga" in file_path:
if 'gga' in file_path and gga_start:
# 筛选时间段1的数据
sun_file_name = os.path.basename(file_path)[:-5] + ".txt"
dest_file_name = os.path.join(target_dir, sun_file_name)
self.split_file(gga_start, gga_end, file_path, dest_file_name)
# time.sleep(3)
# 筛选时间段2的数据
# sat_file_name = os.path.basename(target_path)[:-5] + "_sat.txt"
# dest_file_name = os.path.join(dest_dir, sat_file_name)
# split_file("102306.00,30,11,2023", "103306.00,30,11,2023", target_path, dest_file_name)
# pos文件为gpst时间,相对utc时间快18秒
elif 'pos' in file_path and pos_start:
# 筛选时间段1的数据
sun_file_name = os.path.basename(file_path)[:-5] + ".txt"
dest_file_name = os.path.join(target_dir, sun_file_name)
self.split_file(pos_start, pos_end, file_path, dest_file_name)
# time.sleep(2)
# 如果是目录,则递归处理子目录下的文件
elif os.path.isdir(file_path):
self.function(gga_start, gga_end, pos_start, pos_end, file_path, target_dir)
def split_file(self, pattern_s, pattern_e, source_files, dest_files):
if 'gga' in source_files:
with open(source_files, 'r') as sf, open(dest_files, 'a+') as df:
write = False
count_num = 0
for line in sf:
if re.search(pattern_s, line):
write = True
if write:
count_num += 1
df.write(line)
if re.search(pattern_e, line):
write = False
if count_num == 0:
print(r'当前时间:%s,%s没有数据匹配' % (
datetime.now().strftime('%Y-%m-%d %H:%M:%S'), source_files))
else:
print(r'当前时间:%s,%s总共%s行写入完成,起始于:%s,截止于:%s' % (
datetime.now().strftime('%Y-%m-%d %H:%M:%S'), source_files, count_num, pattern_s,
pattern_e))
elif 'pos' in source_files:
with open(source_files, 'r') as sf, open(dest_files, 'w') as ds:
# 先写入文件前两行
lineTwo = sf.readlines()[:2]
ds.writelines(lineTwo)
with open(source_files, 'r') as sf, open(dest_files, 'a+') as df:
write = False
count_num = 0
for line in sf:
if re.search(pattern_s, line):
write = True
if write:
count_num += 1
df.write(line)
if re.search(pattern_e, line):
write = False
if count_num == 0:
print(r'当前时间:%s,%s没有数据匹配' % (
datetime.now().strftime('%Y-%m-%d %H:%M:%S'), source_files))
else:
print(r'当前时间:%s,%s总共%s行写入完成,起始于:%s,截止于:%s' % (
datetime.now().strftime('%Y-%m-%d %H:%M:%S'), source_files, count_num, pattern_s,
pattern_e))
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = InputDialog()
dialog.show()
sys.exit(app.exec_())