功能介绍
此脚本从一个text文件夹中读取一长串文本,其中含有ipv4的地址,然后通过正则将ipv4的地址以数组的形式存储起来。通过与xls表格中的样本数据进行对比,进行过滤,实现功能为:筛选出除了部门为办公领导和生产技术的其他所有下班未关机的所有数据,并生成一个新的表格。
python代码
from openpyxl import Workbook
import xlrd
import re
# 打开并读取记事本文件,返回文件内容
def read_from_notepad(file_name):
with open(file_name, 'r', encoding='utf-8') as file:
text = file.read()
# 这里可以选择打印或不打印文件内容,以及是否添加休眠
# print("正在打印文本内容请稍等......")
# time.sleep(2)
# print(text)
return text # 返回文件内容
# 提取文本中的IPv4地址
def extract_ipv4(text):
ipv4_pattern = r'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'
ipv4_addresses = re.findall(ipv4_pattern, text)
return ipv4_addresses
def read_excel_xls(file_path, ip_list):
# 打开原始Excel文件
workbook = xlrd.open_workbook(file_path)
# 通过索引获取第一个工作表
sheet = workbook.sheet_by_index(0)
# 创建一个新的工作簿
new_workbook = Workbook()
new_sheet = new_workbook.active
# 写入标题行
new_sheet.append(["IP地址", "部门", "使用人"])
# 遍历原始工作表的所有行
for row_index in range(sheet.nrows):
# 跳过第一行(标题行)
if row_index == 0:
continue
# 获取IP地址
ip = sheet.cell_value(row_index, 0)
# 如果IP地址在传入的IP数组中
if ip in ip_list:
# 获取部门和使用人数据
部门 = sheet.cell_value(row_index, 1)
使用人 = sheet.cell_value(row_index, 2)
# 如果部门不是公司领导或者是生产技术部
if 部门 != "公司领导" and 部门 != "生产技术部":
# 将数据写入新的工作表
new_sheet.append([ip, 部门, 使用人])
# 保存新的Excel文件
new_workbook.save("output.xls")
# 使用函数
file_name = 'text.txt'
text = read_from_notepad(file_name) # 接收从文件中读取的文本
ip_list = extract_ipv4(text) # 提取IPv4地址
file_path = './Subnet Usage Table.xls'
read_excel_xls(file_path, ip_list)
print("已生成xls表格。")
代码说明
需要在同目录下创建一个名为Subnet Usage Table.xls的表格和一个名为text.txt的文本文件,最后在同目录下输出一个名为output.xls的表格。
心得
尽量使用函数化思维编程,而且就个人而言我在写脚本时习惯多建立一个python文件专门用来调试某些函数,当某个函数功能正常时,我再把他放回主python文件中,这样可以保证整个python文件的可读性和思维清晰。