【洛谷月賽十一月】 天選之人
阿新 • • 發佈:2020-11-28
進行專案的原因:本人在淘寶上購買了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