2016-11-07 7 views
0

私はプログラミングが初めてで、最近24時間以内に作成または変更されたファイルを転送する関数をPythonで作成しています。最後に、SQlite3データベースを使用して最後のファイル転送の日時を追跡する方法を理解する必要があります。私はSQlite3でデータベースとテーブルを作成する方法を知っていますが、それをファイル転送機能に結びつけることになります。これは私のファイル転送のためのコードです:SQlite3を使った関数の使用を追跡する

import os,time 
    import datetime 
    import shutil 
    import datetime as dt 
    conn = sqlite3.connect('file_check.db') 
    c = conn.cursor() 


    now = dt.datetime.now() 
    ago = now-dt.timedelta(hours=24) 
    strftime = "%H:%M %m/%d/%Y" 
    created = ('C:\\Users\\Jacqueline\\Desktop\\created') 
    dest = ('C:\\Users\\Jacqueline\\Desktop\\dest') 

    def file_trans(created, dest): 
     for root, dirs,files in os.walk(created): 
      for fname in files: 
       path = os.path.join(root, fname) 
       st = os.stat(path)  
       mtime = dt.datetime.fromtimestamp(st.st_mtime) 
       if mtime > ago: 
        print("True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y")) 
        shutil.move(path, dest) 
        c.execute("INSERT INTO FileCheck (unix, datestamp, timestamp) VALUES (?,?,?)", (unix, datestamp, timestamp)) 
        conn.commit 
    conn.close 


    def main(source, destination): 
    # parameters passed into file_trans 
     source = created 
     destination = dest 
     #call file_trans 
     file_trans(source, destination) 


    if __name__=='__main__': 
     main() 

ファイル転送が行われたときに私が追跡できるようにsqlite3のテーブルに何とかこれをリンクする方法上の任意のアイデアを?データベースを作成するための私のコードは次のとおりです。

import sqlite3 
    import time 
    import datetime #creates datestamp 
    import random #creates value 

    conn = sqlite3.connect("file_check.db") #defines connection 
    c = conn.cursor() 


    def create_table(): 
     c.execute("CREATE TABLE IF NOT EXISTS FileCheck(unix REAL, datestamp TEXT, timestamp TEXT)") 


    def dynamic_data_entry(): 
     unix = time.time()                       #timestamp 
     datestamp = str(datetime.datetime.fromtimestamp(unix).strftime('%m/%d/%Y'))      #formats datestamp 
     timestamp = str(datetime.datetime.fromtimestamp(unix).strftime('%H:%M:%S'))                  
     c.execute("INSERT INTO FileCheck (unix, datestamp, timestamp) VALUES (?,?,?)",    
      (unix, datestamp, timestamp)) 
     conn.commit() 

    create_table() 
    c.close() 
    conn.close() 

テーブルはうまくありません - 私は関数にリンクするだけです。

+0

あなたは既に '' now''で時刻と日付を取得していますので、sqlite3 dbの作成方法を知っているので、単純に '' db.execute( "INSERT ....."、。 ..) ''あなたのテーブルに対応する適切なパラメータをfile_trans関数の最後に指定してください –

+0

SQLiteデータベースとはどのようにやりとりしていますか?学ぶには少し時間がかかるかもしれませんが、SQLAlchemyはPythonでデータベースを扱う際の優れたツールです。このようなシンプルなプロジェクトではおそらく残念ですが、長期的には学習価値があります。 –

+0

データベースが作成されたら、私はそれを自分の関数で参照するだけでいいですか?それは私がファイル転送が使用されるたびに追跡することができますか? – nikkiy

答えて

0

実行文に渡す変数を定義する必要があるようです。依然としてエラーが発生している場合は、使用している現在のコードと、取得している完全なスタックトレース(エラーメッセージ)を送信してください。何がうまくいかないのかを人々に伝えることができるのは驚くべきことです。

また、接続の作成を関数に移動したので、関数を呼び出す前に接続の終了に問題がありません。

import os,time 
import datetime 
import shutil 
import datetime as dt 
import sqlite3 

now = dt.datetime.now() 
ago = now-dt.timedelta(hours=24) 
strftime = "%H:%M %m/%d/%Y" 
created = ('C:\\Users\\Jacqueline\\Desktop\\created') 
dest = ('C:\\Users\\Jacqueline\\Desktop\\dest') 

def file_trans(created, dest): 
    conn = sqlite3.connect('file_check.db') 
    c = conn.cursor() 
    for root, dirs,files in os.walk(created): 
     for fname in files: 
      path = os.path.join(root, fname) 
      st = os.stat(path)  
      mtime = dt.datetime.fromtimestamp(st.st_mtime) 
      if mtime > ago: 
       print("True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y")) 
       shutil.move(path, dest) 
       unix = time.time() 
       datestamp = str(datetime.datetime.fromtimestamp(unix).strftime('%m/%d/%Y')) 
       timestamp = str(datetime.datetime.fromtimestamp(unix).strftime('%H:%M:%S')) 
       c.execute("INSERT INTO FileCheck (unix, datestamp, timestamp) VALUES (?,?,?)", (unix, datestamp, timestamp)) 
       conn.commit() 
    conn.close() 
+0

これは夢のように働いた。本当にありがとう!ベストプラクティスのヒントもありがとう。 – nikkiy

+0

心配する必要はありません。私たちはそれを把握してうれしいです。 :) –

関連する問題