利用Python制作本地Excel的查詢與生成的程序問題
前言
今天教大家利用Python制作本地Excel的查詢與生成的程序
需求
制作一個(gè)程序 有一個(gè)簡單的查詢?nèi)肟?實(shí)現(xiàn)Excel的查詢與生成
實(shí)驗(yàn)步驟
1打開一個(gè)exe 彈出一個(gè)界面
2有一個(gè)查詢 卡號(hào) 點(diǎn)擊查詢
3下方展示查詢的結(jié)果 同時(shí)將這個(gè)查詢的結(jié)果 追加到一個(gè)新的結(jié)果Excel文件里
4新的結(jié)果Excel文件 格式和源文件格式相同 但是每次都在最后追加
今天教大家利用Python制作本地Excel的查詢與生成的程序
Excel預(yù)覽圖片
1.2 導(dǎo)入模塊并讀取Excel文件
等會(huì)要用的模塊有:pandas、os、xlwt和uuid
用import導(dǎo)入的代碼:
import pandas, os, xlwt, uuid
導(dǎo)入好后,就要讀取Excel文件了。讀取Excel要用到pandas的read_excel函數(shù)。
try: exl = pandas.read_excel(aim_path) except: print('找不到文件!請檢查一下文件路徑或文件是否存在') os._exit(0)
剛剛導(dǎo)入os模塊就是為了做異常捕獲找不到文件時(shí)的退出。
查詢
2.1 Excel的索引與輸入
為了方便后面查詢,要把DataFrame的索引(index)設(shè)為查詢輸入的卡號(hào)。接著,輸出以卡號(hào)為索引的DF,以便用戶查詢。最后,就開始循環(huán)輸入了。
exl.set_index('卡號(hào)', inplace = True) print(f'{exl}\n') while 1: try: idx = input('卡號(hào)(輸入“退出”即可退出):') if idx == '退出': os._exit(0)
2.2 開始查詢、豐富程序
查詢用dataframe.loc[index]來完成,最后輸出返回的Series。為了避免用戶輸入非卡號(hào)信息,就又加了異常捕獲。
res = exl.loc[idx] print(f'\n{res}\n') except KeyError: print('你的卡號(hào)可能輸錯(cuò)了!我找不到這個(gè)卡號(hào)的人哦~\n') continue except: print('有些錯(cuò)誤發(fā)生了!\n') continue
追加查詢結(jié)果到Excel
3.1 讀取或新建Excel
3.1.1 讀取
讀取跟上面一樣,用read_excel
try: res_exl = pandas.read_excel(res_path)
3.1.2 新建Workbook和Sheet
現(xiàn)在輪到xlwt模塊大展身手啦~ 用Workbook函數(shù)來新建Workbook;用add_sheet函數(shù)新增Sheet
except: workbook = xlwt.Workbook() sheet = workbook.add_sheet('new') col = 0
3.1.2 寫入Column
在Column的位置,需要填入查詢的Excel的列索引,用
list(pandas.read_excel(aim_path).columns.values)
可以獲取到。然后把列索引以xlwt.write填進(jìn)去,最后把DF保存再讀取這個(gè)Excel。
for i in list(pandas.read_excel(aim_path).columns.values): sheet.write(0, col, i) col += 1 workbook.save(res_path) res_exl = pandas.read_excel(res_path)
3.2 追加結(jié)果
首先,把結(jié)果res變量設(shè)置成列表類型。然后,在這個(gè)列表里面新增結(jié)果沒有的卡號(hào)。最后把這個(gè)列表設(shè)置成一個(gè)Series(索引為查詢的Excel的列索引)。
res_series_data = list(res) res_series_data.insert(2, idx) res_series = pandas.Series( res_series_data, index = list( pandas.read_excel(aim_path).columns.values ) )
現(xiàn)在建好了Series,準(zhǔn)備追加了。追加完后還要保存這個(gè)Excel。
res_exl.loc[str(uuid.uuid1())] = res_series try: res_exl.to_excel(res_path, index = False) except: print('寫入失敗')
這里用了uuid.uuid1來隨機(jī)產(chǎn)生索引,避免重復(fù)而修改其它人的值。最后幾行就是保存的操作,python index = False
的意思就是把索引隱藏掉了。
完整代碼
try: exl = pandas.read_excel(aim_path) except: print('找不到文件!請檢查一下文件路徑或文件是否存在') os._exit(0) exl.set_index('卡號(hào)', inplace = True) print(f'{exl}\n') while 1: try: idx = input('卡號(hào)(輸入“退出”即可退出):') if idx == '退出': os._exit(0) res = exl.loc[idx] print(f'\n{res}\n') except KeyError: print('你的卡號(hào)可能輸錯(cuò)了!我找不到這個(gè)卡號(hào)的人哦~\n') continue except: print('有些錯(cuò)誤發(fā)生了!\n') continue try: res_exl = pandas.read_excel(res_path) except: workbook = xlwt.Workbook() sheet = workbook.add_sheet('new') col = 0 for i in list(pandas.read_excel(aim_path).columns.values): sheet.write(0, col, i) col += 1 workbook.save(res_path) res_exl = pandas.read_excel(res_path) res_series_data = list(res) res_series_data.insert(2, idx) res_series = pandas.Series( res_series_data, index = list( pandas.read_excel(aim_path).columns.values ) ) res_exl.loc[str(uuid.uuid1())] = res_series try: res_exl.to_excel(res_path, index = False) except: print('寫入失敗')
到此這篇關(guān)于利用Python制作本地Excel的查詢與生成的程序的文章就介紹到這了,更多相關(guān)PythonExcel查詢生成的程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在前女友婚禮上,用Python破解了現(xiàn)場的WIFI還把名稱改成了
今日重點(diǎn):① python暴力拿下WiFi密碼,②python拿下路由器管理頁面,文中有非常詳細(xì)的代碼示例,干貨滿滿,,需要的朋友可以參考下2021-05-05Python 使用 docopt 解析json參數(shù)文件過程講解
這篇文章主要介紹了Python 使用 docopt 解析json參數(shù)文件過程講解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python3內(nèi)置函數(shù)chr和ord實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換
這篇文章主要介紹了Python3內(nèi)置函數(shù)chr和ord實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06