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的顺序-到另一个参考表格中查找-补全与自己相关的数据

使用python脚本,读取excel表格生成erlang数据

python脚本之制作excel表格