Python的小應用--使用PyWebIO和PyMySQL創(chuàng)建身份證號碼查詢工具
最近,我的好哥們給我提了一個新的需求,讓我用Python編程語言和MySQL數(shù)據(jù)庫創(chuàng)建一個簡單的身份證號碼查詢工具。這個工具可以掃描指定文件夾中的文件名,并將它們存儲到MySQL數(shù)據(jù)庫中。用戶只需輸入身份證號碼,就可以查詢文件名中是否包含這個身份證號碼。
其中,界面部分我決定使用PyWebIO,PyWebIO提供了一系列命令式的交互函數(shù)來在瀏覽器上獲取用戶輸入和進行輸出,將瀏覽器變成了一個“富文本終端”,可以用于構(gòu)建簡單的Web應用或基于瀏覽器的GUI應用。PyWebIO還可以方便地整合進現(xiàn)有的Web服務,不需要編寫HTML和JS代碼,就可以構(gòu)建出具有良好可用性的應用。
準備工作
首先,確保你已經(jīng)安裝了必要的 Python 庫。你可以使用以下命令安裝它們:
pip install pymysql pywebio
接下來,我們需要一個 MySQL 數(shù)據(jù)庫來存儲文件名。在這里,我們將數(shù)據(jù)庫配置信息存儲在一個 JSON 文件中,以方便管理和更新。
import json
with open(r"path/to/your/config.json", 'r', encoding='utf-8') as f:
db_config = json.loads(f.read())
數(shù)據(jù)庫操作
我們將使用 PyMySQL 庫來連接 MySQL 數(shù)據(jù)庫,創(chuàng)建一個表來存儲文件名,并實現(xiàn)插入和查詢操作。
def create_table(connection):
# 創(chuàng)建數(shù)據(jù)庫表
create_table_query = """
CREATE TABLE IF NOT EXISTS files (
id INT AUTO_INCREMENT PRIMARY KEY,
file_name VARCHAR(255) NOT NULL UNIQUE
)
"""
try:
with connection.cursor() as cursor:
cursor.execute(create_table_query)
connection.commit()
except Error as e:
print(f"Error: {e}")
def insert_filename(connection, filename):
# 插入文件名到數(shù)據(jù)庫表
insert_query = "INSERT INTO files (file_name) VALUES (%s)"
try:
with connection.cursor() as cursor:
cursor.execute(insert_query, (filename,))
connection.commit()
except Error as e:
print(f"Error: {e}")
def get_filenames_from_db(connection):
# 從數(shù)據(jù)庫中獲取所有文件名
select_query = "SELECT file_name FROM files"
try:
with connection.cursor() as cursor:
cursor.execute(select_query)
result = cursor.fetchall()
return [row[0] for row in result]
except Error as e:
print(f"Error: {e}")
return []
文件夾掃描和數(shù)據(jù)存儲
接下來,我們將使用 Python 的 os 模塊掃描文件夾中的文件,并將文件名插入到數(shù)據(jù)庫中。
import os
def scan_folder_and_insert(connection):
# 掃描文件夾并將文件名插入數(shù)據(jù)庫
folder_path = r'C:\path\to\your\folder'
for filename in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, filename)):
insert_filename(connection, filename)
PyWebIO Web 界面
現(xiàn)在,我們將使用 PyWebIO 創(chuàng)建一個簡單的 Web 界面,允許用戶輸入身份證號碼并查詢數(shù)據(jù)庫。
from pywebio import start_server
from pywebio.input import input, TEXT
from pywebio.output import put_text, put_table
def search_file_by_id(connection):
id_number = input("請輸入身份證號碼:", type=TEXT)
filenames = get_filenames_from_db(connection)
results = [filename for filename in filenames if id_number in filename]
if results:
put_table([(result,) for result in results], header=['文件名'])
else:
put_text("沒有找到包含身份證號碼的文件名。")
if __name__ == "__main__":
# 連接到MySQL數(shù)據(jù)庫
try:
with connect(**db_config) as connection:
create_table(connection)
scan_folder_and_insert(connection)
# 啟動Web界面
start_server(search_file_by_id, port=80)
except Error as e:
print(f"Error: {e}")
打包為可執(zhí)行文件
最后,我們可以使用 PyInstaller 工具將 Python 腳本打包為可執(zhí)行文件。打開命令行終端,執(zhí)行以下命令:
pyinstaller -F -w your_script_name.py
請將 your_script_name.py 替換為你的 Python 腳本文件名。執(zhí)行完畢后,你將在 dist 文件夾中找到生成的可執(zhí)行文件。
在游覽器中運行效果如下
通過這個簡單的工具,用戶可以輕松地查詢文件名中是否包含特定身份證號碼。當然,這只是一個靈活的基礎,可以根據(jù)需要繼續(xù)擴展和定制功能。