Python, easyGUI и sqlite3: использование python для чтения файлов в одной или нескольких папках, затем добавление имен и имен папок в базу - PullRequest
0 голосов
/ 21 ноября 2011

Я новичок в python и пытаюсь добавить имена баз данных и текстовые файлы этих папок в базу данных Проблема в том, что я не знаю, как добавить «textfiles» и «opendirectory» в базу данных. Пожалуйста, посмотрите на этот код и помогите мне. Спасибо

#!/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 голосов
/ 21 ноября 2011

Предполагая, что вы хотите добавить все имена файлов в базу данных (без учета их относительного пути внутри opendirectory), вот способ исправить ваши запросы.

cur.execute ("INSERT INTO folder (foldername) VALUES (?);", (opendirectory))
cur.execute("INSERT INTO file (dataname) VALUES(?);", (textfiles))

Примечание: этого недостаточно для создания логической связи в базе данных между файлом и opendirectory, в котором он был найден.


Теперь предположим, что вы хотите сохранить в БД путь к родительской папке файла в дополнение к его имени файла: Просто добавьте столбец parent_folder в таблицу file и используйте запрос на вставку, подобный этому (я изменил имена переменных, чтобы их было легче понять):

for dirpath, dirsInDirpath, filesInDirPath in os.walk(opendirectory):
    for myfile in filesInDirPath:   
        cur.execute("INSERT INTO file (dataname, parent_folder) VALUES(?, ?);", (myfile, dirpath))
...