Python、easyGUI和sqlite3:使用python读取一个或多个文件夹中的文件, затем将文件夹名称和文件名添加到数据库中
我刚开始学习Python,想把文件夹的名字和那些文件夹里的文本文件添加到数据库里。问题是我不知道怎么把“文本文件”和“打开的文件夹”添加到数据库中。请看看这段代码,帮帮我。谢谢!
#!/usr/bin/python
from easygui import *
import sys, glob, os, sqlite3
msgbox("Please choose your folder ","Welcome to MTT", ok_button ="Choose")
opendirectory = diropenbox("Welcome", "MTT",None)
con = sqlite3.connect('test.db')
cur = con.cursor()
cur.execute('DROP TABLE IF EXISTS folder')
cur.execute('DROP TABLE IF EXISTS file')
cur.execute('CREATE TABLE folder( folderid INTEGER PRIMARY KEY, foldername VARCHAR(120))')
cur.execute('CREATE TABLE file( fileid INTEGER PRIMARY KEY, folderid INTEGER, dataname VARCHAR(120), FOREIGN KEY(folderid) REFERENCES foldername(folderid))')
con.commit()
def main():
for dirpath,dirnames,filenames in os.walk(opendirectory):
for textfiles in filenames:
print textfiles
print opendirectory
cur.execute ('INSERT INTO folder (folderid, foldername) VALUES (null,opendirector)')
cur.execute('INSERT INTO file(fileid, dataname) VALUES(null,textfiles)')
cur.execute('SELECT * FROM folder')
print cur.fetchall()
main()
print 'success'
1 个回答
2
假设你想把所有的文件名添加到数据库中(不考虑它们在 opendirectory
中的相对路径),这里有一种方法可以修正你的查询。
cur.execute ("INSERT INTO folder (foldername) VALUES (?);", (opendirectory))
cur.execute("INSERT INTO file (dataname) VALUES(?);", (textfiles))
注意:这样做并不足以在数据库中建立文件和它所在的 opendirectory
之间的逻辑联系。
现在,假设你还想在数据库中存储文件的父文件夹路径,除了文件名之外:
只需在你的 file
表中添加一个 parent_folder
列,然后使用这样的插入查询(我把变量名改得更容易理解):
for dirpath, dirsInDirpath, filesInDirPath in os.walk(opendirectory):
for myfile in filesInDirPath:
cur.execute("INSERT INTO file (dataname, parent_folder) VALUES(?, ?);", (myfile, dirpath))