我是编程新手,使用Python更是如此。所以请原谅我的任何无知。我正在尝试为自己编写一个脚本,用于移动过去24小时内修改过的文件。到目前为止,我想出了这个:
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 :(得分:2)
嘿伙伴我其实就是这样做过的。我发现时间比较会有一些问题,比较和移动文件夹会有一些问题。
试试这个:
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"
这将确保复制任何文件名(包括中文,俄文和日文),并复制任何文件夹(目录或子目录)。它还将保留所有文件属性。
答案 1 :(得分:1)
有一些事情需要改变。首先,您无法将datetime
中的before
与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)