Python、easyGUI和sqlite3:使用python读取一个或多个文件夹中的文件, затем将文件夹名称和文件名添加到数据库中

0 投票
1 回答
959 浏览
提问于 2025-04-17 06:44

我刚开始学习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))

撰写回答