简单mysql数据库支持下的文件搜索
进行项目的原因:本人在淘宝上购买了20G的电子书,但是淘宝商家并不提供文件引索服务.为了快速的定位本地电子书位置,对电子书目录进行数据库化.
项目结构:
使用python os库递归地查询目标文件夹下每一个文件的地址并进行暂存.
使用python pymysql库将查询到的文件名称以及文件路径生成数据条并插入数据库中
使用python pymysql FIND语句进行查询,并将查询文件的.py文件使用.bat进行调用,生成一个可以手动输入查询关键字的命令行程序
项目代码:
1.对于文件夹的递归遍历以及文件的数据库插入: (Insert.py)
def dirlist(path, conn, cmd):
filelist = os.listdir(path)
for filename in filelist:
filepath = os.path.join(path, filename)
if os.path.isdir(filepath):
dirlist(filepath, conn, cmd)
else:
if i[0] % 1000 == 0:
i[0] = 0
print(filename) #动态地输出被遍历到的文件名用于显示程序进度
cmd.execute(
"insert into dir_guid(name,directory) values(%s,%s);",
(filename[0:63], path[0:255]),
)
i[0] += 1
conn.commit()
return 0
其中conn 与 cmd 是 pymysql 中对于数据库连接的接口.其中***覆盖的内容根据实际数据库设定
conn = pymysql.connect(
host="localhost",
port=****,
charset="UTF8",
user="root",
password="*********",
database="****",
)
cmd = conn.cursor() #这里是将函数作为参数传入
注意最后需要关闭数据库的连接:
cmd.close()
conn.close()
2.对于数据库进行查询: (main.py)
1 import pymysql
2 import argparse
3
4
5 def main():
6 parser = argparse.ArgumentParser(description="请输入需要检索的文件名以及搜索参数:")
7 parser.add_argument("ds")
8 args = parser.parse_args()
9 #设置命令行参数的翻译器以及读取命令行参数
10
11 searchString = "%" + str(args.ds) + "%"
12 conn = pymysql.connect(
13 host="localhost",
14 port=3306,
15 charset="UTF8",
16 user="root",
17 password="********",
18 database="mdb",
19 )
20 cmd = conn.cursor()
21 #设置连接参数
22 cmd.execute(
23 "select name,directory from dir_guid_2 where name like '{_searchString}';".format(
24 _searchString=searchString
25 )
26 )
27 #使用查询命令进行查询
28 i = 0
29 for result in cmd.fetchall():
30 i += 1
31 string = (">>{}>>\t".format(i)) + result[1] + "\\" + result[0]
32 print(string)
33 #遍历得到的所有结果,并将其打印在命令行上
34 cmd.close()
35 conn.close()
36
37
38 main()
3.对于python查询程序的封装 : (Search.bat)
1 @echo off
2 cls
3 echo.
4 echo please input the searching key words:
5 set /p a=
6 echo --------start of the searching result------
7 echo -------------------------------------------
8 python main.py "%a%"
9 echo -------------------------------------------
10 echo --------end of the searching result--------
11 echo.
12 echo.
13 pause