2017-07-05 94 views
1

所以我應該移動新文件(.txt),這些文件在24小時內也被編輯過。擴展名爲.txt的文件應該從文件夾A到B.我的代碼有效,但是,每次按F5運行程序後,它都會一次移動一個文件。有人請幫助我通過單擊一次來移動所有文件嗎?FileMover 24小時 - Python

感謝

import os 
import datetime 
import shutil 

source = ("/Users/SD/Desktop/A") 
destination = ("/Users/SD/Desktop/B") 
currentTime = datetime.datetime.now() 
oldFile = currentTime - datetime.timedelta(hours=24) 
for files in os.listdir(source): 
    if files.endswith('.txt'): 
     path = os.path.join(source, files) 
     st = os.stat(path) 
     mTime = datetime.datetime.fromtimestamp(st.st_mTime) 

     if mTime > oldFile: 
      print('{} ~ last modified {}'.format(path, mTime)) 

fileSource = os.path.join(source, files) 
fileDestination = os.path.join(destination, files) 
shutil.move(fileSource, fileDestination) 
print("\tMoved {} to {}.\n".format(files, destination)) 

回答

1

你壓痕是關閉我覺得在你的代碼,您將for -loop後的文件。這導致只有for -loop的最後一個文件被移動。移動循環內的最後一位代碼,並在最後的if-明確內移動符合條件的任何文件。

此外,你的時間測試真的讓我困惑,我懷疑它甚至做你認爲它的確如此。後

..\Desktop\A\ 
    -text_a.txt 
    -text_b.txt 
..\Desktop\B\ 
    ~Empty~ 

文件:

..\Desktop\A\ 
    ~Empty~ 
..\Desktop\B\ 
    -text_a.txt 
    -text_b.txt 

PS:我已經與(我)更清晰的測試之前取代它......

import os 
import datetime 
import shutil 

source = ("/Users/../Desktop/A") 
destination = ("/Users/../Desktop/B") 
currentTime = datetime.datetime.now() 
for files in os.listdir(source): 
    if files.endswith('.txt'): 
     path = os.path.join(source, files) 
     st = os.stat(path) 
     #---New Time Test setup---# 
     tDelta = currentTime - datetime.datetime.fromtimestamp(st.st_mtime) 
     maxDelta = 24*3600 
     if tDelta.total_seconds() < maxDelta: 
      print('{} ~ last modified {}'.format(path, tDelta)) 
      fileSource = os.path.join(source, files) 
      fileDestination = os.path.join(destination, files) 
      shutil.move(fileSource, fileDestination) 
      print("\tMoved {} to {}.\n".format(files, destination)) 

文件,我認爲是有代碼中的小錯誤和oldFile應該是dayOld,反之亦然。你應該編輯這個...

+0

嗨,感謝您的答覆。所以我改變了你上面提到的一切,但仍然沒有:/。它實際上給了我更多的錯誤不必要的縮進。 – Loves2Program

+0

呃?定義不必要?它在哪裏失敗?你能發佈錯誤嗎? – Kraay89

+0

我檢查了一下:我在'st.st_mTime'上得到了一個錯誤,顯然它應該是'st.st_mtime'(沒有大寫字母T,我會在答案中改變它)。除此之外,它適用於我。仔細檢查縮進,如果有必要重新從頭開始... – Kraay89