2016-12-08 21 views
1

私はプログラミングが初めてで、さらにはPythonでもそうです。だから私のことは何の無知を許してください。私は、過去24時間以内に変更されたファイルを移動するスクリプトを自分自身で作成しようとしています。これまでのところ、私はこの思い付いています作成/変更日にファイルを移動してからPythonで移動する

import datetime 
import os 
import shutil 


src = "C:\Users\Student\Desktop\FolderA" 
dst = "C:\Users\Student\Desktop\FolderB" 


now = dt.datetime.now() 
before = now - dt.timedelta(hours=24) 

def mins_since_mod(fname): 
    return (os.path.getmtime(fname)) 


for fname in os.listdir(src): 
    if mins_since_mod > before: 
     src_fname = os.path.join(src,fname) 
     os.path.join(dst,fname) 
     shutil.move(src_fname, dst) 

私は私が解に近いんだけど、私はこの作業を取得する方法を見つけ出すように見えることはできません。私はここでコミュニティを見回し、私の問題の解決策を見つけることができませんでした。ご指摘やご提案ありがとうございます。

答えて

0

変更する項目がいくつかあります。まず、beforedatetimeと、getmtime()が返すUnixタイムスタンプを比較することはできません。これを直接使用する方が簡単です。また、実際には(フル)ファイル名をmins_since_mod()に渡す必要があります。ここで

はそれがより良い何を反映してmins_since_mod()の名前を変更し、動作するはず何か:

import time 
import os 
import shutil 

SECONDS_IN_DAY = 24 * 60 * 60 

src = "C:\Users\Student\Desktop\FolderA" 
dst = "C:\Users\Student\Desktop\FolderB" 

now = time.time() 
before = now - SECONDS_IN_DAY 

def last_mod_time(fname): 
    return os.path.getmtime(fname) 

for fname in os.listdir(src): 
    src_fname = os.path.join(src, fname) 
    if last_mod_time(src_fname) > before: 
     dst_fname = os.path.join(dst, fname) 
     shutil.move(src_fname, dst_fname) 
+0

これは完全に機能しました。あなたが行ったことを明確にしてくれてありがとう。 @CFNZ_Techieも最高でしたが、これは自分のスクリプトに書いたものに最も近いものでした。 –

1

ねえ、私は実際にちょうどこのような何か自分自身を行っているチームメイト。私はいくつかの問題は時間の比較だけでなく、フォルダを比較し、移動するいくつかの問題があることがわかりました。

はこれを試してみてください:

import os 
import shutil 
import datetime 

def filter_by_date(src_folder, archive_date): 
    os.chdir(src_folder) 
    delay_time = 24 * 60 * 60 
    archive_period = archive_date - delay_time 
    return [ 
     name for name in os.listdir(u'.') 
     if os.path.isdir(name) 
     and datetime.datetime.fromtimestamp(os.path.getmtime(name)) < archive_period 
    ] 


if __name__ == '__main__': 
    folders = filter_by_date("C:/Users/Student/Desktop/FolderA", time.time()) 
    for files in folders: 
     print files 
     try: 
      shutil.copytree(files, os.path.join("C:/Users/Student/Desktop/New", files)) 
     except OSError as e: 
      print('\nDirectory not copied. Error: %s' % e) 
     except shutil.Error as e: 
      try: 
       files = files.encode('UTF-8') 
       dst_path = os.path.join('C:/Users/Student/Desktop/FolderB/', files) 
       shutil.copytree(files, dst_path) 
      finally: 
       print('\nDirectory not copied. Error: %s' % e) 

    print "\Completed" 

これは、任意のファイル名(中国語、ロシア語、日本語を含むがコピーされます)を保証するために起こっているし、任意のフォルダ(ディレクトリまたはサブディレクトリ)がコピーされます。また、すべてのファイル属性を保持します。

関連する問題