综述
@date:2022-09-28
脚本实现:
- 把要处理的文件统一存放到同一目录,然后读取文件名打印到 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
最终复用脚本
import os
import sys
import xlrd
import shutil
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
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:
if ".docx" in line:
docx_name_list.append(line)
return docx_name_list
def select_from_excel(excel, ip_list, sheet, belong_col):
data = xlrd.open_workbook(excel)
sheet_1 = data.sheets()[sheet]
nrows = sheet_1.nrows
ncols = sheet_1.ncols
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):
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:
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:
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()
ip_filename_dict = {}
ip_list = []
for x in docx_name_list:
tail = x.find('_')
ip = x[4:tail]
ip_list.append(ip)
ip_filename_dict[ip] = x
select_from_excel(excel, ip_list, sheet, belong_col)
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__':
sheet = int(input("请输入要统计excel的第几张表,从0开始计数:"))
belong_col = int(input("请输入资产归属部门所在的列,从0开始计数:"))
first_get_ip_belong(sheet, belong_col)
ip_belong_list = read_to_list("ip_belong.txt")
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 = belong[:tail]
final_list.append(ip_filename_dict[ip] + ":" + belong[tail+1:])
write_to_txt("filename_belong.txt", final_list)
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)