Python读取Excel里面key的小工具

6 篇文章 0 订阅
2 篇文章 0 订阅

前言

本文是上一篇的姊妹篇,用winform做了的那个小工具之后,发现拿C#做的过程还是比较麻烦的(小工具C#版本工程放在git上了,地址是git@github.com:andyqingliu/XlsKeySearch.git),后来看Python,觉得Python处理Excel做数据分析与统计其实更简单方便,于是又用Python实现了一版,工程地址在git@github.com:andyqingliu/XlsKeySearch-Python.git.

两个工程实现了同样的功能,就是读取Excel,通过key value键值对检索Excel里面的内容并通过key写入对应的value值。在操作的同时生成log文件方便后续问题跟踪。本文主要记录Python写这个工具时的点点滴滴,备忘。

其中涉及以下内容:

  • VSCode配置Python开发环境
  • 用Pandas读写Excel数据
  • PyQt5可视化界面
  • Python自带的logging包
  • PyInstaller打包Python程序

一. VSCode配置Python开发环境

有很多可以配置Python环境的工具,比如网上比较多的有Pycharm,Sublime,VSCode等等。查了些资料,网上有很多教程都是拿Pycharm来做Python的开发环境。个人觉得这个要单独安装并且看起来比较复杂,正好已经在拿vscode写lua,还是微软大大的后台,又能支持Python。所以干脆拿它来做Python的开发环境。

话不多说,直接开干。

这些个VSCode与Python的安装就不多说了。最重要的就是在VSCode的“扩展”里面搜索Python,然后安装这个扩展。写个HelloWorld,F5的时候选择一下Python的版本。我本地装了Python2.7和Python3.8.我直接选的3.8作为解释器。然后打印出来HelloWorld。

二. 用Pandas读写Excel数据

Pandas是Python的一个强大的数据分析包,本文只用到了很小一部分功能,但是其实它功能强大。

首选安装Pandas.

pip install pandas

安装完成之后就可以在代码里面

import pandas as pd

采用pd简写来替代pandas。

pandas的官方文档地址:https://pandas.pydata.org/pandas-docs/stable/

pandas有两种基础的数据结构,一个是Series,一个是DataFrame.Series是一维的带标记的数据集合。index是标记的集合,data是任意数据的集合.DataFrame是二维的带标记的数据结构,带有列信息,可以装载任意数据类型。可以看做一个Series字典,或者说是一个表格型的数据结构。

可以通过loc和iloc来定位数据。

可以通过drop或者dropna来处理丢失的数据。包括行和列的数据。比如:

	#把列名中带unnamed字符串的列丢弃(dataFrame.columns是一个Index Object,可以用.str访问器访问Index里面的元素并进行操作)
    self.contentSheet.drop(self.contentSheet.columns[self.contentSheet.columns.str.contains('unnamed',case = False)],axis = 1, inplace = True)

读取Excel可以用pd.read_excel,示例如下:

		# sheet_name=[0,1]只读取表的sheet1和sheet2,因为sheet1记录的是内容,sheet2记录的是key value关键字列表
        # skiprows = 1 忽略前1行,从第二行开始读取内容
        # hearder = 0 指定第一行作为列名(因为已经忽略了第一行,其实是将第二行作为列名)
        # usecols= "A:F" 读取从A列到F列的内容(可能随着需要开放出来通过配置来决定读取到第几列),也可以写成列表[0,1,2,3,4,5]
        # usecols=lambda x: "Unnamed" not in x,也可以写成lambda,略过没有列名的的列,或者lambda x: x.find("Unnamed") < 0
        # na_values指定NaN的替代字符
        #keep_default_na 与na_values配合使用,设置为False的时候才会用替代字符替换NaN
        #这里本来想只读取前6列中列名不等于Unnamed的列。发现实现不了!!!要么只能是前6列,要么只能是不等于Unnamed的所有列
cols = list(range(6))
pd.read_excel(io=fPath, sheet_name=[0,1], header=0, skiprows=1, usecols=cols, na_values="", keep_default_na=False)

写Excel可以用DataFrame.to_excel方法,示例如下:

#na_rep用空字符替代
with pd.ExcelWriter(outputPath) as writer:
	self.contentSheet.to_excel(writer, na_rep="", index=False)
	print("输出文件成功")`

三. PyQt5可视化界面

需要在VSCode里面安装Qt for Python和PYQT Integration这两个扩展,Python还需要安装PyQt5这个包。安装完成之后,可以在\Python38-32\Lib\site-packages\pyqt5_tools\Qt\bin这个文件夹下面找到designer.exe这个可执行程序。

运行这个可执行程序之后会出来一个GUI界面,可以制作UI界面,完成之后可以保存为一个XXX.ui的文件,放到工程文件夹里面。

在VSCode里面右键选择刚刚的XXX.ui文件,选择PYQT:Compile Form,执行完成之后会在同级目录生成一个Ui_XXX.py的文件,在调用的地方就可以from Ui_XXX import Ui_Form,然后通过Ui_Form.控件名就能访问到widget的属性与方法。

四. Python自带的logging包

直接import logging,然后就可以使用logging包了,可以设置多个logger。然后设置log的级别。设置好log的输出格式,这个项目里面使用的格式如下:

formatter = logging.Formatter("%(asctime)s[%(thread)d] %(levelname)s %(pathname)s[:%(lineno)d] %(message)s")

即输出格式是:时间,线程id,log级别,调用模块的路径,调用在哪一行,最后是打印的输出信息。

logging支持多种输出,可以输出到控制台,文件,远程服务器,邮箱等。本文只输出到了控制台和文件,代码如下:

# 输出到控制台
streamHandler = logging.StreamHandler(sys.stdout)
logger.addHandler(streamHandler)

# 输出到文件
fileHandler = logging.FileHandler(filename="Log.txt", mode="w", encoding="utf-8")
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)

输出到文件的时候记得encoding="utf-8",否则可能输出的汉字是乱码。mode是覆盖的方式,每次都是从文件头开始写入,清除上一次的log。

PLUS----如果想在控制台输出好看的带颜色的log信息,可以安装coloredlogs包,支持颜色定义。简单的示例如下:

coloredlogs.DEFAULT_FIELD_STYLES = {'asctime': {'color': 'green'}, 'levelname': {'color': 'yellow', 'bold': True}, 'name': {'color': 'blue'}, 'pathname': {'color': 'cyan'}}
coloredlogs.install(fmt="%(asctime)s[%(thread)d] %(levelname)s %(pathname)s[:%(lineno)d] %(message)s")

定义了颜色,log级别,名字等部位的颜色。

五. PyInstaller打包Python程序

Python没有自带PyInstaller打包的包,需要install。

然后用pyinstaller.exe -F path:Main.py --icon icon.ico, -F代表打包单个文件成一个exe文件。 --icon指定exe使用的图片ico。

PS:一般ps里面没有ico格式的导出插件,需要找到ICOFormat64.8bi,需要是64位的哦。32位的不好使。而且图片尺寸不能太大。

最后

这个小工具的工程已上传到git。地址是:git@github.com:andyqingliu/XlsKeySearch-Python.git

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值