python实现固定资产梳理的办法

news2024/12/23 7:11:39

 一、需求;

需求:实现xxx地固定资产的计算以及梳理

1.盘点资产,通过excel表格设计了不同的区域,进行每个区域的资产的计数工作,成为了一个登记事项

2.后续形成文本汇报工作,梳理内容

3.需求把表格中同类的内容进行总体的计算

例如我需要知道表格中A1(服务器机柜数量)最后的总和是多少

问题 :

'\ufeff` 文本中出现的内容,需要解决

通过with open("dysheet.txt","r",encoding="utf-8-sig")as fr:,修改为“utf-8-sig”读取文件方式解决;

 备注说明,名称列中相同的名称,在编号位置同样的编号,为后续python统计提供信息

例如这里的A1 那就是都是服务器机柜数量

二、素材内容

dysheet.txt内容如下;【目的实现这里的A1,A3等是excel表格中的列的“编号”】

A2:机房监控
A3:千兆模块
A4:万兆模块
A5:服务器
A6:防火墙
A7:接入交换机
A8:核心交换机
A9:核心交换机万兆光接口板
A10:核心交换机千兆电接口板
A11:核心交换机千兆光模块接口板
A12:扩展柜
A13:磁盘阵列
A14:万能解码器
A15:卡口应用服务器
A16:存储点播服务器
A17:流媒体服务器
A18:管理控制服务器
B1:系统延时电池组
C1:光纤收发器

三、代码以及注释,代码【读取文本那里还需要优化】

3.1读文本写入字典的时候出现了# {'\ufeffA2',【原来是A2】,出现了这个问题,需要解决

# 读取txt文件内容,形成一个字典,第一个读取的有问题,这个需要解决下
# 读取的内容如下;
# {'\ufeffA2': '机房监控', 'A3': '千兆模块', 'A4': '万兆模块'}

import os




import openpyxl
import re


# 读取excel表格内容,最终形成如下结果
# {'A1': 20, 'A2': 4, 'A3': 51}
def readexcel():

    wb=openpyxl.load_workbook("固定资产盘点情况.xlsx")
    sheet=wb["监管平台机房设备"]
    # 数据内容
    datas=list(sheet)

    # 创建一个字典,用来存放列名以及统计后面的数字
    coldics=dict()

    for row in datas:


        # 过滤多余的内容
        # 第一列
        evecolumn = row[0].value
        # 第三列 数量的列
        num=row[2].value
        if re.match("[^ABCDE]+",evecolumn):
            continue

        if evecolumn in coldics:
            coldics[evecolumn]= int(coldics[evecolumn])+int(num)

        else:
            coldics[evecolumn]=num


    return coldics

# 读取txt文件内容,形成一个字典,第一个读取的有问题,这个需要解决下
# 读取的内容如下;
# {'\ufeffA2': '机房监控', 'A3': '千兆模块', 'A4': '万兆模块'}

# print(coldics)
def readtxt():
    dics=dict()
    with open("dysheet.txt","r",encoding="utf-8")as fr:
        for line in fr:
            # print(line)
            # 取出多余空白符号
            if  not line:
                continue
            line=line.strip()
            print(line)
            key,value=line.split(":")
            dics[key]=value

    return dics
    # print(dics)


# 合并两个字典内容,进行替换
# { '千兆模块': 51, '万兆模块': 8, '服务器': 4, '防火墙': 2, '接入交换机': 23, '核心交换机': 3, '核心交换机万兆光接口板': 3}

def formatdic(datadic,keydic):
    # print(datadic,"<=============datadic")
    # print(keydic,"<==============keydic=====")
    # 新字典用于承装内容
    newdic=dict()

    for key in datadic:

        # newdic[keydic[key]]=datadic[key]
        # new key
        newkey=keydic.get(key)
        newdic[newkey]=datadic[key]

    # print(newdic)
    return newdic

if __name__ == '__main__':
    dicss=readexcel()
    datadic=readexcel()
    keydic=readtxt()
    newdic=formatdic(datadic,keydic)
    print(newdic)

3.2解决问题:

在读取文本、csv文件的时候输出部分的开头多出了个不速之客“\ufeff”

查看了txt/csv文件里面也没有特殊字符,怎么输出就多了\ufeff了呢???

原因分析:
utf-8编码的文件时开头会有一个多余的字符\ufeff,在读文件时会读到\ufeff

解决办法:
只需改一下编码就行,把 UTF-8 编码 改成 UTF-8-sig编码即可



def readtxt():
    dics=dict()
    # with open("dysheet.txt","r",encoding="utf-8")as fr:
    with open("dysheet.txt","r",encoding="utf-8-sig")as fr:
        for line in fr:
            # print(line)
            # 取出多余空白符号
            if  not line:
                continue
            line=line.strip()
            print(line)
            lists=line.split(":")
            key=lists[0].strip()
            value=lists[-1].strip()

            # 对key判断是否是空字符串,如果是空字符串还是得跳过内容;
            if not key:
                continue
            # key,value=line.split(":")
            print(key,"====",value)
            dics[key]=value

    return dics
    # print(dics)


if __name__ == '__main__':
    printdic=readtxt()
    print(printdic)

最终代码:--可以使用的代码【解决了上述问题】

import os




import openpyxl
import re


# 读取excel表格内容,最终形成如下结果
# {'A1': 20, 'A2': 4, 'A3': 51}
def readexcel():

    wb=openpyxl.load_workbook("固定资产盘点情况.xlsx")
    sheet=wb["监管平台机房设备"]
    # 数据内容
    datas=list(sheet)

    # 创建一个字典,用来存放列名以及统计后面的数字
    coldics=dict()

    for row in datas:


        # 过滤多余的内容
        # 第一列
        evecolumn = row[0].value
        # 第三列 数量的列
        num=row[2].value
        if re.match("[^ABCDE]+",evecolumn):
            continue

        if evecolumn in coldics:
            coldics[evecolumn]= int(coldics[evecolumn])+int(num)

        else:
            coldics[evecolumn]=num

    print("excel-datadic==>",coldics)
    return coldics

# 读取txt文件内容,形成一个字典,第一个读取的有问题,这个需要解决下
# 读取的内容如下;
# {'\ufeffA2': '机房监控', 'A3': '千兆模块', 'A4': '万兆模块'}

# print(coldics)

def readtxt():
    dics=dict()
    # with open("dysheet.txt","r",encoding="utf-8")as fr:
    with open("dysheet.txt","r",encoding="utf-8-sig")as fr:
        for line in fr:
            # print(line)
            # 取出多余空白符号
            if  not line:
                continue
            line=line.strip()
            # print(line)
            lists=line.split(":")
            key=lists[0].strip()
            value=lists[-1].strip()

            # 对key判断是否是空字符串,如果是空字符串还是得跳过内容;
            if not key:
                continue
            # key,value=line.split(":")
            # print(key,"====",value)
            dics[key]=value
    # print("keydic内容:",dics)
    print("key关键字字典:",dics)
    return dics
    # print(dics)


# 合并两个字典内容,进行替换
# { '千兆模块': 51, '万兆模块': 8, '服务器': 4, '防火墙': 2, '接入交换机': 23, '核心交换机': 3, '核心交换机万兆光接口板': 3}

def formatdic(datadic,keydic):
    # print(datadic,"<=============datadic")
    # print(keydic,"<==============keydic=====")
    # 新字典用于承装内容
    newdic=dict()

    for key in datadic:

        # newdic[keydic[key]]=datadic[key]
        # new key
        newkey=keydic.get(key)
        newdic[newkey]=datadic[key]

    # print(newdic)
    return newdic

if __name__ == '__main__':

    datadic=readexcel()
    keydic=readtxt()
    newdic=formatdic(datadic,keydic)
    print("最终结果:",newdic)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023金九银十跳槽必会Java核心知识点笔记整理

现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减 HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了&#xff0c;上班 8 小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&#…

沐曦与百度飞桨完成兼容性测试,助力计算机视觉应用发展

近日&#xff0c;沐曦集成电路&#xff08;上海&#xff09;有限公司&#xff08;以下简称“沐曦”&#xff09;的曦思N100人工智能推理GPU与百度飞桨完成 I 级兼容性测试。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是沐曦自2022年9月加入“硬件…

五子棋AI智能算法的测试方法

先前发了几篇五子棋游戏程序设计的博文&#xff0c;设计了游戏程序&#xff0c;也设计了AI智能奕棋的算法&#xff0c;运行程序检测算法的可行性&#xff0c;完成人机模式游戏功能的设置。本文重点介绍测试方法。 对于人机对战的电脑智能应子算法&#xff0c;参阅很多五子棋书…

React项目请求接口跨域设置代理怎么设置

在src 目录下创建setupProxy.js const {createProxyMiddleware} require(http-proxy-middleware)module.exports function(app) {app.use(createProxyMiddleware(/api, { //api1是需要转发的请求(所有带有/api1前缀的请求都会转发给5000)target: http://172.20.17.199:808…

学习Kotlin~函数

有名函数 函数参数 不打算传入值参&#xff0c;可以预先给参数指定默认值 //如果不打算传入值参&#xff0c;可以预先给参数指定默认值private fun fix(name: String, age: Int 2) {println(name age);}//调用的时候fix("hhhh");fix("hasee", 30);有名的…

【Html】Html+Less实现一个简单的加载动画

效果 运行环境 系统&#xff1a;Win10系统 IDE&#xff1a;Visual Studio Code v1.79.2 VSCode插件&#xff1a;Easy LESS v2.0.0 index.html代码 <!DOCTYPE html> <html><head><title>加载动画</title><link rel"stylesheet" hr…

Android的Context详解 - 揭开Context的神秘面纱

这篇文章是基于我四年前的一篇文章进行更正和深入探究。背景是&#xff0c;2019年4月份我在找工作&#xff0c;看到一个问题&#xff0c;问this&#xff0c;getBaseContext()、getApplication()、getApplicationContext()的区别。当时我写了简单的demo验证&#xff0c;得出了跟…

看看螯合物前体多肽试剂DOTA-E[c(RGDfK)2]的全面解析吧!

【产品描述】 DOTA-E[c(RGDfK)2]螯合物前体多肽试剂&#xff0c;RGD肽指含有Arg-Gly-Asp三个氨基酸组成的序列多肽&#xff0c;可以提供大量的RGD直线肽&#xff0c;RGD环肽&#xff0c;RGD双环肽、RGD模拟肽等&#xff0c;也可以根据客户需求定制RGD肽。 DOTA-E [c (RGDfK) 2…

6.3 B树

多路平衡查找树 1.定义 B树的阶&#xff1a;B树中所有结点的孩子个数的最大值&#xff0c;表示成m m阶B树&#xff1a;空树或者满足如下特性的m叉树 特性&#xff1a; 1.树中每个结点最多子树 m 关键字m-1 2.根节点不是终端结点&#xff0c;至少有两棵子树 3.根结点除外&…

Java 遍历List的两种方式

可参考文章 Notepad编译并运行java代码_notepad怎么运行java代码_西晋的no1的博客-CSDN博客 中的第二种方法测试下述代码。 在java中&#xff0c;可以使用for循环和使用for-each循环两种方式遍历List。 1.使用for循环遍历List 2.使用for-each遍历List 注意&#xff1a;使用for-…

Java使用Maven工程操作OpenGL ES绘制三角形和圆形;绘制完成后操作键盘控制然图形移动

OpenGL ES 绘制三角形&#xff0c;操作键盘移动位置 PS&#xff1a;想快速看到效果的小伙伴&#xff0c;可以在引入依赖后&#xff0c;先跳到完整代码部分 第一步&#xff1a;依赖引入 <properties><lwjgl.version>3.2.3</lwjgl.version><joml.version&…

mysql 密码丢失的解决方案

问题描述 mysql 密码丢失的解决方案 解决方案&#xff1a; 停止服务; 重新启动服务&#xff1a;mysqld.exe --skip-grant-tables //启动服务器但是跳过权限; 当前启动的服务器没有权限概念&#xff1a;非常危险&#xff0c;任何客户端&#xff0c;不需要任何用户信息都可…

Pycharm连接远端Python环境操作Spark

文章目录 1. 创建工程&#xff0c;指定远端python解析器2. 添加远端python解析器3.配置完成4.本地文件自动同步远端5.删除远端python解析器(非必须操作&#xff0c;重新配置时参考该项)6. 文件模板配置 远程连接方案, 允许程序员连接远端测试环境, 确保环境的统一, 避免各种环境…

消息队列中间件(一)

场景 流量削峰 应用解耦 异步处理 分类 ActiveMQ 优&#xff1a;单机吞吐万级&#xff0c;时效性ms级&#xff0c;可用性高&#xff08;主从架构&#xff09;&#xff0c;可靠性高&#xff08;丢失率低&#xff09; 缺&#xff1a;官方维护少&#xff0c;高吞吐场景较少…

QT Creator上位机学习(二)基础控件及信号与槽

c# 系列文章目录 文章目录 布局控件信号与槽程序图标使用技巧 布局控件 美化界面的时候&#xff0c;经常需要进行一些控件的布局&#xff0c;这时需要使用一些容器类。 在快捷栏出&#xff0c;也有一些布局设计的选择 如上图&#xff0c;其中涉及到几种编辑状态&#xff1…

Math简单学习

1.绝对值 就变个符号 public static double abs(double a) {return (a < 0.0D) ? 0.0D - a : a; }public static float abs(float a) {return (a < 0.0F) ? 0.0F - a : a;}public static int abs(int a) {return (a < 0) ? -a : a;}IntrinsicCandidatepublic sta…

Redis【实战篇】---- 优惠卷秒杀

Redis【实战篇】---- 优惠卷秒杀 1. 全局唯一ID2. Redis实现全局唯一ID3. 添加优惠券4. 实现秒杀哦下单5. 库存超卖问题分析6. 乐观锁解决超卖问题7. 优惠券秒杀 ---- 一人一单8. 集群环境下的并发问题 1. 全局唯一ID 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&…

封装websocket请求-----vue2

参考 (875条消息) 封装websocket请求-----vue项目实战&#xff08;完整版&#xff09;_vue websocket封装_winne雪的博客-CSDN博客https://blog.csdn.net/m0_38134431/article/details/105794108 一、在utils目录下创建websocket.js文件 import {Message} from element-ui /…

Mac 已经在.bash_profie中配置过sdk环境依然报zsh: command not found: adb

提示 前置条件 已经安装好Android studio 然后~/.bash_profile 或.bash_profile也已经配置sdk路径&#xff0c;打开第二个终端输入adb时提示zsh: command not found: adb 解决办法 打开终端输入下面命令 echo export ANDROID_HOME/Users/$USER/Library/Android/sdk >>…

近日,我处理了一个大文件导入 nginx HTTP/1.1“ 413 585的问题

今天&#xff0c;导入一个1万多条数据的excel文件&#xff0c;本地没有用到nginx&#xff0c;导入很顺畅 部署到了线上后&#xff0c;导入文件后后台并没有日志输出&#xff0c;说明没有进入后端 经过摸排&#xff0c;分析&#xff0c;最终发现&#xff0c;是nginx这关没过 …