最近,我的好哥们给我提了一个新的需求,让我用Python编程语言和MySQL数据库创建一个简单的身份证号码查询工具。这个工具可以扫描指定文件夹中的文件名,并将它们存储到MySQL数据库中。用户只需输入身份证号码,就可以查询文件名中是否包含这个身份证号码。
其中,界面部分我决定使用PyWebIO,PyWebIO提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的Web应用或基于浏览器的GUI应用。PyWebIO还可以方便地整合进现有的Web服务,不需要编写HTML和JS代码,就可以构建出具有良好可用性的应用。
准备工作
首先,确保你已经安装了必要的 Python 库。你可以使用以下命令安装它们:
pip install pymysql pywebio
接下来,我们需要一个 MySQL 数据库来存储文件名。在这里,我们将数据库配置信息存储在一个 JSON 文件中,以方便管理和更新。
import json
with open(r"path/to/your/config.json", 'r', encoding='utf-8') as f:
db_config = json.loads(f.read())
数据库操作
我们将使用 PyMySQL 库来连接 MySQL 数据库,创建一个表来存储文件名,并实现插入和查询操作。
def create_table(connection):
# 创建数据库表
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):
# 插入文件名到数据库表
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):
# 从数据库中获取所有文件名
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 []
文件夹扫描和数据存储
接下来,我们将使用 Python 的 os 模块扫描文件夹中的文件,并将文件名插入到数据库中。
import os
def scan_folder_and_insert(connection):
# 扫描文件夹并将文件名插入数据库
folder_path = r'C:pathtoyourfolder'
for filename in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, filename)):
insert_filename(connection, filename)
PyWebIO Web 界面
现在,我们将使用 PyWebIO 创建一个简单的 Web 界面,允许用户输入身份证号码并查询数据库。
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数据库
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}")
打包为可执行文件
最后,我们可以使用 PyInstaller 工具将 Python 脚本打包为可执行文件。打开命令行终端,执行以下命令:
pyinstaller -F -w your_script_name.py
请将 your_script_name.py 替换为你的 Python 脚本文件名。执行完毕后,你将在 dist 文件夹中找到生成的可执行文件。
在游览器中运行效果如下
通过这个简单的工具,用户可以轻松地查询文件名中是否包含特定身份证号码。当然,这只是一个灵活的基础,可以根据需要继续扩展和定制功能。