1. 程式人生 > 實用技巧 >【洛谷月賽十一月】 天選之人

【洛谷月賽十一月】 天選之人

進行專案的原因:本人在淘寶上購買了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