Python复用脚本根据excel表格的IP和资产归属部门,保存docx文件到部门目录
Posted Web3Ao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python复用脚本根据excel表格的IP和资产归属部门,保存docx文件到部门目录相关的知识,希望对你有一定的参考价值。
文章目录
综述
@date:2022-09-28
现实需求:根据word文件名中的IP,在excel查找IP对应的部门,然后把该 word 文件移动到部门目录里。
脚本实现:
- 把要处理的文件统一存放到同一目录,然后读取文件名打印到 filename.txt
- 根据文件名中的ip,查询归属部门,并输出
ip:归属部门
键值对,打印到 belong.txt - 人工核对 belong.txt:(一般情况下可以不进行核对)
- 由于查询结果存在误差,比如查询 192.168.1.1 把 192.168.1.10 的所属部门也保存到 1.1 的结果里面(需要人工核对的内容)
- 对于单个ip同时归属两个部门的情况,可以在移动文件时采用 copy 方式
- 去重
- 根据 ip 反查文件名,考虑在提取阶段建立一个 ip:文件名 格式的字典即可。
部分函数
获取当前目录下所有 docx 文件的文件名
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
# 备注root返回当前目录路径;dirs返回当前路径下所有子目录;files返回当前路径下所有非目录子文件
return root, dirs, files
def write_filename():
file_dir = "./"
save_filename = "filename.txt"
root, dirs, files = file_name(file_dir)
f = open(save_filename, 'w', encoding='utf-8')
for line in files: # 如果要写入所有的非目录子文件(如.docx,.xlxs文件名,则此处将dirs替换成files变量)
if ".docx" in line:
f.write(line + '\\n')
f.close()
print("文件\\'\\'已保存成功!".format(save_filename))
根据文件名提取IP
def get_ip(docx_name_list): # 根据文件名规则,提取ip列表
ip_list = []
for x in docx_name_list:
tail = x.find('_')
ip = x[4:tail]
ip_list.append(ip)
return ip_list
最终复用脚本
# coding=utf-8
import os
import sys
import xlrd
import shutil
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
# 备注root返回当前目录路径;dirs返回当前路径下所有子目录;files返回当前路径下所有非目录子文件
return root, dirs, files
def write_filename():
file_dir = "./"
save_filename = "filename.txt"
root, dirs, files = file_name(file_dir)
docx_name_list = []
for line in files: # 如果要写入所有的非目录子文件(如.docx,.xlxs文件名,则此处将dirs替换成files变量)
if ".docx" in line:
docx_name_list.append(line)
return docx_name_list
def select_from_excel(excel, ip_list, sheet, belong_col): # 从 excel 中查询 IP 的资产归属情况,并把 ip:归属中心 数据对保存到 belong.txt
data = xlrd.open_workbook(excel) # 打开 excel 文件
sheet_1 = data.sheets()[sheet] # 选择在哪张表里进行查询,此处是第一张表
nrows = sheet_1.nrows # 获取该sheet中的有效行数
ncols = sheet_1.ncols # 获取该sheet中的有效列数
getdata = []
# 读取文件数据
belong_list = []
for ip in ip_list:
for rowNum in range(0, nrows):
tep1 = []
for colNum in range(0, ncols):
tep1.append(sheet_1.row(rowNum)[colNum].value)
if ip in str(sheet_1.row(rowNum)[colNum].value):
# local = fileName.split('.')
# result.append("文件:" + fileName + " 的表 " + worksheets[filenum] + " 找到了 ")
belong_list.append(ip + ":" + str(sheet_1.row(rowNum)[belong_col].value))
print(belong_list)
f = open("ip_belong.txt", 'w', encoding='utf-8')
for line in belong_list: # 如果要写入所有的非目录子文件(如.docx,.xlxs文件名,则此处将dirs替换成files变量)
f.write(line + '\\n')
f.close()
return belong_list
def read_to_list(filename):
file = open(filename, 'r+', encoding='utf-8')
result_list = list(file.read().split())
file.close()
return result_list
def write_to_txt(filename, list):
f = open(filename, 'w', encoding='utf-8')
for line in list: # 如果要写入所有的非目录子文件(如.docx,.xlxs文件名,则此处将dirs替换成files变量)
f.write(line + '\\n')
f.close()
def read_to_dict(filename):
file = open(filename, 'r+', encoding='utf-8')
list = file.read().split()
ip_filename_dict =
for x in list:
single = x.split(":")
ip_filename_dict[single[0]] = single[1]
return ip_filename_dict
def copyfile(old_file_path, new_folder_path):
shutil.copy(old_file_path, new_folder_path)
def first_get_ip_belong(sheet, belong_col):
excel = "D:\\\\xxx\\\\主机-汇总.xlsx"
docx_name_list = write_filename() # 读取当前目录下的所有docx文件的文件名
# 根据文件名规则,提取ip列表
ip_filename_dict = # ip:文件名 格式的字典,便于根据ip反查文件名
ip_list = [] # ip 列表
for x in docx_name_list:
tail = x.find('_')
ip = x[4:tail]
ip_list.append(ip)
ip_filename_dict[ip] = x
# ip_list = ["10.1.1.165", "10.1.10.166"]
select_from_excel(excel, ip_list, sheet, belong_col) # 查找 excel,获取到数据对 ip:归属部门,并保存结果到 ip_belong.txt 文件
with open("ip-filename-dict.txt", "w", encoding='utf-8') as f:
for item in ip_filename_dict:
f.write(item + ":" + ip_filename_dict[item] + '\\n')
f.close()
if __name__ == '__main__':
# 使用说明:把 py 文件存放到 docx 文件所在目录
# 内置参数:first_get_ip_belong:excel excel文件的绝对路径
# 第一部分,从 excel 中查询资产归属情况,并保存结果到 ip_belong.txt 文件
sheet = int(input("请输入要统计excel的第几张表,从0开始计数:"))
belong_col = int(input("请输入资产归属部门所在的列,从0开始计数:"))
first_get_ip_belong(sheet, belong_col)
# 第二部分,需要人工校对修改 ip_belong.txt 文件中的数据
# 第三部分,根据筛查后的 ip:部门 获取到 文件名:部门,
ip_belong_list = read_to_list("ip_belong.txt")
# 根据 IP 反查文件名,然后获取到数据对 文件名:归属部门
ip_filename_dict = read_to_dict("ip-filename-dict.txt")
print(ip_filename_dict)
final_list = []
for belong in ip_belong_list:
tail = belong.find(':') # 提取 ip
ip = belong[:tail]
final_list.append(ip_filename_dict[ip] + ":" + belong[tail+1:])
write_to_txt("filename_belong.txt", final_list)
# 第四部分,根据 final_list 中的 文件名:归属部门,copy文件到相应目录
for belong in final_list:
path = "./" + belong.split(":")[1]
isExists = os.path.exists(path)
if not isExists: # 如果不存在则创建目录,创建目录操作函数
os.makedirs(path)
copyfile(belong.split(":")[0], path)
以上是关于Python复用脚本根据excel表格的IP和资产归属部门,保存docx文件到部门目录的主要内容,如果未能解决你的问题,请参考以下文章
Python脚本:实现数据库导出数据到excel表格,支持mysql,postergrsql,MongoDB
python根据nagios配置文件将监控的服务联系人等信息导出到excel表格
Python--通过索引excel表将文件进行文件夹分类的脚本+读取指定目录下所有文件名的脚本
基于python实现-根据Excel表格指定的UniqueKey的顺序-到另一个参考表格中查找-补全与自己相关的数据