add batch operation file

This commit is contained in:
pandx 2025-06-25 11:26:59 +08:00
parent deabca2aa8
commit 04bcb00670
3 changed files with 76 additions and 5 deletions

6
all_info.csv Normal file
View File

@ -0,0 +1,6 @@
IP地址,MAC地址,版本号,通道1名称通道1绑定设备,通道2名称,通道2绑定设备
192.168.0.161,50-29-4D-20-12-01,1.1,通道1名称,通道1绑定设备,通道2名称,通道2绑定设备
192.168.0.177,50-29-4D-20-12-02,2.1,通道2名称,通道2绑定设备,通道3名称,通道3绑定设备
192.168.0.174,50-29-4D-20-12-03,3.1,通道3名称,通道3绑定设备,通道4名称,通道4绑定设备
192.168.0.185,50-29-4D-20-12-04,4.1,通道4名称,通道4绑定设备,通道5名称,通道5绑定设备
192.168.0.168,50-29-4D-20-12-05,5.1,通道5名称,通道5绑定设备,通道6名称,通道6绑定设备
1 IP地址,MAC地址,版本号,通道1名称,通道1绑定设备,通道2名称,通道2绑定设备
2 192.168.0.161,50-29-4D-20-12-01,1.1,通道1名称,通道1绑定设备,通道2名称,通道2绑定设备
3 192.168.0.177,50-29-4D-20-12-02,2.1,通道2名称,通道2绑定设备,通道3名称,通道3绑定设备
4 192.168.0.174,50-29-4D-20-12-03,3.1,通道3名称,通道3绑定设备,通道4名称,通道4绑定设备
5 192.168.0.185,50-29-4D-20-12-04,4.1,通道4名称,通道4绑定设备,通道5名称,通道5绑定设备
6 192.168.0.168,50-29-4D-20-12-05,5.1,通道5名称,通道5绑定设备,通道6名称,通道6绑定设备

View File

@ -1,6 +1,8 @@
import sys import sys
import csv
from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem, \ from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem, \
QPushButton, QCheckBox QPushButton, QCheckBox, QFileDialog, QMessageBox
from PyQt5.QtCore import Qt
class BatchOperationDialog(QDialog): class BatchOperationDialog(QDialog):
@ -75,6 +77,9 @@ class BatchOperationDialog(QDialog):
# 设置对话框的布局 # 设置对话框的布局
self.setLayout(main_layout) self.setLayout(main_layout)
# 允许最大化
# self.setWindowState(Qt.WindowMaximized)
def select_all(self): def select_all(self):
for row in range(self.table_widget.rowCount()): for row in range(self.table_widget.rowCount()):
item = self.table_widget.item(row, 0) item = self.table_widget.item(row, 0)
@ -95,14 +100,69 @@ class BatchOperationDialog(QDialog):
print("升级节点按钮被点击") print("升级节点按钮被点击")
def save_data(self): def save_data(self):
print("保存表数据按钮被点击") # 打开文件保存对话框
# 可以在这里实现保存表格数据的操作比如导出为CSV等 options = QFileDialog.Options()
file_path, _ = QFileDialog.getSaveFileName(self, "保存表数据", "", "CSV Files (*.csv);;All Files (*)", options=options)
if file_path:
# 保存表格数据到CSV文件
with open(file_path, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
# 写入表头
headers = [self.table_widget.horizontalHeaderItem(i).text() for i in range(self.table_widget.columnCount())]
writer.writerow(headers)
# 写入表格内容
for row in range(self.table_widget.rowCount()):
row_data = [self.table_widget.item(row, col).text() if self.table_widget.item(row, col) else "" for col in range(self.table_widget.columnCount())]
writer.writerow(row_data)
print(f"数据已保存到 {file_path}")
def load_ips(self): def load_ips(self):
print("load ip list") # 打开文件选择对话框
options = QFileDialog.Options()
file_path, _ = QFileDialog.getOpenFileName(self, "选择IP地址文件", "", "Text Files (*.txt);;All Files (*)", options=options)
if file_path:
# 读取IP地址
with open(file_path, 'r') as file:
lines = file.readlines()
invalid_ips = []
for i, line in enumerate(lines):
ip = line.strip()
# 验证IP地址格式
if not self.validate_ip(ip):
invalid_ips.append(i + 1)
if invalid_ips:
# 如果有无效IP弹出提示框
QMessageBox.warning(self, "错误", f"以下行的IP地址无效{', '.join(map(str, invalid_ips))}")
else:
# 将IP地址加载到表格
for i, line in enumerate(lines):
ip = line.strip()
if i < self.table_widget.rowCount():
self.table_widget.setItem(i, 1, QTableWidgetItem(ip)) # 设置IP地址列
print(f"加载了{len(lines)}个IP地址")
def validate_ip(self, ip):
# IP地址验证正则表达式
import re
pattern = r"^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
return bool(re.match(pattern, ip))
def load_all_info(self): def load_all_info(self):
print("load complete info") # 打开CSV文件选择对话框
options = QFileDialog.Options()
file_path, _ = QFileDialog.getOpenFileName(self, "选择CSV文件", "", "CSV Files (*.csv);;All Files (*)", options=options)
if file_path:
# 读取CSV文件
with open(file_path, mode='r', encoding='utf-8') as file:
reader = csv.reader(file)
headers = next(reader) # 跳过表头
for row_num, row_data in enumerate(reader):
if row_num < self.table_widget.rowCount():
for col_num, cell_data in enumerate(row_data):
self.table_widget.setItem(row_num, col_num+1, QTableWidgetItem(cell_data))
print(f"加载了CSV文件中的内容{file_path}")
if __name__ == "__main__": if __name__ == "__main__":

5
ips.txt Normal file
View File

@ -0,0 +1,5 @@
192.168.0.161
192.168.0.177
192.168.0.174
192.168.0.185
192.168.0.168