按创建/修改日期移动文件,然后使用Python移动

时间:2016-12-08 19:05:22

标签: python python-2.7 module

我是编程新手,使用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)

我知道我接近解决方案,但我似乎无法弄清楚如何让它发挥作用。我在社区环顾四周,无法找到问题的解决方案。感谢您的任何线索或建议。

2 个答案:

答案 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中的beforegetmtime()返回的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)