【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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值