获取文件版本号

原因:上线时总是需要统计本次上线dll的版本号,一个个看属性太费劲了,用python实现查看文件的版本号,写入excel

步骤:1、遍历目录下所有文件,

   2、得到文件的版本号,修改时间

   3、写入excel

 

import time
from common import Common
from excelCommon import ExcelCommon

class Test(object):

    def __init__(self):
        pass
    # 获取文件
    def getFileDate(self,path):
        fileDate = Common.getFileDict(self,path)
        return fileDate

    #获取文件大小
    def getFileSize(self,path):
        fileSize = Common.getFileSize(self,path,"kb")
        return str(fileSize) + "kb"

    # 获取文件版本号
    def getFileVersion(self,path):
        fileVersion = Common.getFileVersion(self,path)
        return fileVersion

    # 文件修改时间
    def getFileUpdate(self,path):
        # 原始时间
        befortime = Common.getFileUpdate(self,path)
        # 原时间转换为元组时间
        fileUpdate = time.strptime(befortime)
        # 元组时间格式化
        filetime = time.strftime("%Y/%m/%d %H/%M/%S",fileUpdate)
        return filetime

    # 文件版本、大小、修改时间,添加至list<map>
    def control(self, path):
        filedata = self.getFileDate(path)
        for item in filedata:
            fileVersion = self.getFileVersion(item["fileabspath"])
            fileSize = self.getFileSize(item["fileabspath"])
            fileUpdate = self.getFileUpdate(item["fileabspath"])
            item.setdefault("fileVersion",fileVersion)
            item.setdefault("fileSize",fileSize)
            item.setdefault("fileUpdate",fileUpdate)
        return filedata

    # 数据写入excel表格
    def write_excel(self,xlsName,sheetName,data,title,itemTitle):
        ExcelCommon.excel_write(self,xlsName,sheetName,data,title,itemTitle)

if __name__ == '__main__':
    test = Test()
    xlswriter = ExcelCommon()
    data = test.control(r"D:\DiskTop\test")
    title = ["文件路径","文件名称","文件版本","文件大小","修改日期"]
    itemTitle = ["dirpath","filename","fileVersion","fileSize","fileUpdate"]
    test.write_excel("file.xlsx","dll",data,title,itemTitle)
import os
import shutil
import math
import win32api
import time

class Common(object):

    def __init__(self):
        pass

    # 获取指定文件夹下所有文件绝对路径 返回数组
    '''
    dirpath     是一个string,代表目录的路径,
    dirnames    是一个list,包含了dirpath下所有子目录的名字。
    filenames   是一个list,包含了非目录文件的名字。
    '''
    def getFileList(self, path):
        file_list = []
        for (dirpath, dirnames, filenames) in os.walk(path):
            for file in filenames:
                file_list.append(os.path.join(dirpath, file))
        return file_list

    # 获取文件夹下所有文件 返回list<map>
    '''
        [{
            'dirpath': 'D:\\DiskTop\\test\\01_优化 读取配置文件更换为数据库查询 功能',
            'filename': 'filTSALDIInventoryUpload.exe'
         }, {
            'dirpath': 'D:\\DiskTop\\test\\01_优化 读取配置文件更换为数据库查询 功能',
            'filename': 'filTSALDIInventoryUpload.xml'
         }]
    '''
    def getFileDict(self, path):
        fileList = []
        for (dirpath, dirname, filename) in os.walk(path,os.sep):
            for file in filename:
                map = {
                    "dirpath":dirpath,
                    "filename": file,
                    "fileabspath": os.path.join(dirpath,file)
                }
                fileList.append(map)
        return fileList

    # 判断文件夹是否存在 存在:删除该文件夹下所有内容并创建,不存在:创建文件夹
    # 参数:检查目录、检查名字
    def isExist(self, path, fileName):
        os.chdir(path)
        if os.path.exists(fileName):
            shutil.rmtree(fileName)
            os.makedirs(fileName)
        else:
            os.makedirs(fileName)

    # 获取文件大小
    def getFileSize(self,path,size):
        fileSize = os.path.getsize(path)
        if size == "kb" or size == "KB":
            fileSize = math.ceil(fileSize / 1024)
            return fileSize

    # 获取文件版本号
    def getFileVersion(self,path):
        try:
            info = win32api.GetFileVersionInfo(path, os.sep)
            ms = info['FileVersionMS']
            ls = info['FileVersionLS']
            version = '%d.%d.%d.%d' % (win32api.HIWORD(ms), win32api.LOWORD(ms), win32api.HIWORD(ls), win32api.LOWORD(ls))
        except:
            version = ""
        return version

    # 获取文件更新时间
    """
        # os.path.getatime(file) 输出文件访问时间
        # os.path.getctime(file) 输出文件的创建时间
        # os.path.getmtime(file) 输出文件最近修改时间
    """
    def getFileUpdate(self,path):
        return time.ctime(os.path.getmtime(path))


if __name__ == '__main__':
    common = Common()
    # files = common.getFileList("D:\\DiskTop\\new")
    # common.isExist("D:\DiskTop\\new", "20201231")
    # files = common.getFileDict(r"D:\DiskTop\test")
    # print(files)

    time = common.getTime(time.localtime(time.time()))
    print(time)
import xlsxwriter

class ExcelCommon(object):

    def __init__(self):
        pass

    def excel_write(self,xlsName,sheetName,data,title,itemTitle):
        workbook = xlsxwriter.Workbook(xlsName)
        sheet = workbook.add_worksheet(sheetName)
        if title:
            # 写入第一行
            for index, item in enumerate(title):
                sheet.write(0, index, item)
            row = 1
        else:
            row = 0
        for item in data:
            for index,i in enumerate(itemTitle):
                sheet.write(row,index,item.get(i))
            row += 1

        workbook.close()

if __name__ == '__main__':
    excelCommon = ExcelCommon()
    data = [{
    'dirpath': 'D:\\DiskTop\\test\\01_优化 读取配置文件更换为数据库查询 功能',
    'filename': 'filTSALDIInventoryUpload.exe',
    'fileabspath': 'D:\\DiskTop\\test\\01_优化 读取配置文件更换为数据库查询 功能\\filTSALDIInventoryUpload.exe',
    'fileVersion': '6.0.77.14',
    'fileSize': '37kb',
    'fileUpdate': 'Thu Jan 14 17:06:36 2021'
}]
    vtitle = ["dirpath",'fileVersion','fileSize']
    title = ["路径",'文件名','文件大小']

    excelCommon.excel_write("test.xlsx","dll",data,title,vtitle)

 

posted @ 2021-01-17 14:32  LForest  阅读(486)  评论(0编辑  收藏  举报