程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

利用Python制作本地Excel的查詢與生成的程序

編輯:Python

目錄

前言

大家好

今天教大家利用Python制作本地Excel的查詢與生成的程序

需求

制作一個程序 有一個簡單的查詢入口 實現Excel的查詢與生成

實驗步驟

1打開一個exe 彈出一個界面

2有一個查詢 卡號 點擊查詢

3下方展示查詢的結果 同時將這個查詢的結果 追加到一個新的結果Excel文件裡

4新的結果Excel文件 格式和源文件格式相同 但是每次都在最後追加

今天教大家利用Python制作本地Excel的查詢與生成的程序

Excel預覽圖片

1.2 導入模塊並讀取Excel文件

等會要用的模塊有:pandas、os、xlwt和uuid

用import導入的代碼:

import pandas, os, xlwt, uuid

導入好後,就要讀取Excel文件了。讀取Excel要用到pandas的read_excel函數。

try:
exl = pandas.read_excel(aim_path)
except:
print('找不到文件!請檢查一下文件路徑或文件是否存在')
os._exit(0)

剛剛導入os模塊就是為了做異常捕獲找不到文件時的退出。

查詢

2.1 Excel的索引與輸入

為了方便後面查詢,要把DataFrame的索引(index)設為查詢輸入的卡號。接著,輸出以卡號為索引的DF,以便用戶查詢。最後,就開始循環輸入了。

exl.set_index('卡號', inplace = True)
print(f'{exl}\n')
while 1:
try:
idx = input('卡號(輸入“退出”即可退出):')
if idx == '退出':
os._exit(0)

2.2 開始查詢、豐富程序

查詢用dataframe.loc[index]來完成,最後輸出返回的Series。為了避免用戶輸入非卡號信息,就又加了異常捕獲。

 res = exl.loc[idx]
print(f'\n{res}\n')
except KeyError:
print('你的卡號可能輸錯了!我找不到這個卡號的人哦~\n')
continue
except:
print('有些錯誤發生了!\n')
continue

追加查詢結果到Excel

3.1 讀取或新建Excel

3.1.1 讀取

讀取跟上面一樣,用read_excel

 try:
res_exl = pandas.read_excel(res_path)

3.1.2 新建Workbook和Sheet

現在輪到xlwt模塊大展身手啦~ 用Workbook函數來新建Workbook;用add_sheet函數新增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填進去,最後把DF保存再讀取這個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 追加結果

首先,把結果res變量設置成列表類型。然後,在這個列表裡面新增結果沒有的卡號。最後把這個列表設置成一個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
)
)

現在建好了Series,准備追加了。追加完後還要保存這個Excel。

 res_exl.loc[str(uuid.uuid1())] = res_series
try:
res_exl.to_excel(res_path, index = False)
except:
print('寫入失敗')

這裡用了uuid.uuid1來隨機產生索引,避免重復而修改其它人的值。最後幾行就是保存的操作, python index = False 的意思就是把索引隱藏掉了。

完整代碼

try:
exl = pandas.read_excel(aim_path)
except:
print('找不到文件!請檢查一下文件路徑或文件是否存在')
os._exit(0)
exl.set_index('卡號', inplace = True)
print(f'{exl}\n')
while 1:
try:
idx = input('卡號(輸入“退出”即可退出):')
if idx == '退出':
os._exit(0)
res = exl.loc[idx]
print(f'\n{res}\n')
except KeyError:
print('你的卡號可能輸錯了!我找不到這個卡號的人哦~\n')
continue
except:
print('有些錯誤發生了!\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('寫入失敗')

期待你的關注~


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved