FileMover 24小时 - Python

时间:2017-07-05 07:49:03

标签: python datetime shutil

所以我应该移动新文件(.txt),这些文件也是在24小时内编辑的。扩展名为.txt的文件应该从文件夹A到B.我的代码可以工作,但每次按F5运行程序后,它一次只能移动一个文件。有人请点击一下来帮助我移动所有文件吗?

谢谢

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 个答案:

答案 0 :(得分:1)

您的缩进已关闭我认为在您的代码中,您在for循环之后移动文件。这导致仅移动for - 循环的最后一个文件。将最后一段代码移到循环中,并在最后一个if - 语句中移动,以移动符合条件的任何文件。

此外,您的时间测试确实让我感到困惑,我怀疑它甚至做了您认为它的作用。我用(对我来说)更清晰的测试替换了它......

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))

之前的文件:

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

之后的文件:

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

PS:我认为您的代码中存在一些错误,oldFile应该是dayOld,反之亦然。你应该编辑这个......