FileMover 24 小时 - Python
FileMover 24hrs - Python
所以我应该移动新的文件 (.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))
我认为在你的代码中你的缩进是关闭的,你在 for
循环之后移动了文件。这导致仅移动 for
-loop 的最后一个文件。将最后一段代码移到循环内,特别是最后一个 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
,反之亦然。你应该编辑这个...
所以我应该移动新的文件 (.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))
我认为在你的代码中你的缩进是关闭的,你在 for
循环之后移动了文件。这导致仅移动 for
-loop 的最后一个文件。将最后一段代码移到循环内,特别是最后一个 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
,反之亦然。你应该编辑这个...