Python讀取Excel裏面key的小工具

前言

本文是上一篇的姊妹篇,用winform做了的那個小工具之後,發現拿C#做的過程還是比較麻煩的(小工具C#版本工程放在git上了,地址是[email protected]:andyqingliu/XlsKeySearch.git),後來看Python,覺得Python處理Excel做數據分析與統計其實更簡單方便,於是又用Python實現了一版,工程地址在[email protected]: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。地址是:[email protected]:andyqingliu/XlsKeySearch-Python.git

發佈了19 篇原創文章 · 獲贊 12 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章