在 Python 中移动特定时间范围的文件

Moving time-range specific files in Python

我是编程新手,正在完成一项作业,该作业与使用 Python 创建脚本有关,以检测过去 24 小时内创建或修改的一个文件夹中的文件,然后移动这些文件文件到不同的目录。

我写了一段代码,打印文件的创建和修改日期,在 一个函数,它还可以对 24 小时前的旧 files/modified 进行排序。但是我正在努力创建一个脚本,该脚本实际上需要那些特定的文件并将它们传输到一个新文件夹。这是我的代码的第一部分:

    import os,time
    import datetime
    import shutil


    now = dt.datetime.now()
    ago = now-dt.timedelta(hours=24)
    strftime = "%H:%M %m/%d/%Y"
    created = 'C:\Users\Jacquelin\e\Desktop\created'
    dest = 'C:\Users\Jacqueline\Desktop\dest'


    for root, dirs,files in os.walk(created):  
        for fname in files:
            path = os.path.join(root, fname)
            st = os.stat(path)    
            mtime = dt.datetime.fromtimestamp(st.st_mtime)
            if mtime > ago:
                print "True:  ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y")
            else:
                print False

    for fname in os.listdir(created):
        if mtime > ago:                   
            shutil.move(path, dest)
            print "moved to dest", fname

我正在使用 shutil.move 来传输文件,并且已经尝试了一百万种方法 -- 但无法弄清楚!我也在努力将这些转化为函数来简化事情。到目前为止,这就是我所拥有的:

    def find_info():                                 #this first func. works fine.
        for root, dirs, files in os.walk(created):
        for fname in files:
            path = os.path.join(root, fname)                                        
            st = os.stat(path)    
            mtime = dt.datetime.fromtimestamp(st.st_mtime)                          
        if mtime > ago:
            print True
        else:
            print False

对于 "move" 函数,我觉得这是正确的想法,但由于不知道要传递的变量,我将括号留空。 that returns 一长串疯狂的布尔值。所以.

    def move():
        for fname in os.listdir(created):
            path = os.path.join(root, fname)
            if find_info(fname) == True:                   
                shutil.move(path, dest)
                print "moved to dest", fname

    print find_info()                           #variable? is one even needed?
    print move()                                #variable???? 

    print os.listdir(dest)
    print os.listdir(created)

我不确定要将什么变量传递给函数。之后,我正在打印目录以查看文件是否确实已传输。该死的东西不会移动。

谢谢!!

你快到了。在检测到特定文件符合移动条件(即 before/after/instead of print("True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y")))后,只需调用 shutil.move 函数。这样的事情会起作用:

import os,time
import datetime
import shutil

import datetime as dt

now = dt.datetime.now()
ago = now-dt.timedelta(hours=24)
strftime = "%H:%M %m/%d/%Y"
created = 'here'
dest = 'there'

for root, dirs,files in os.walk(created):  
    for fname in files:
        path = os.path.join(root, fname)
        st = os.stat(path)    
        mtime = dt.datetime.fromtimestamp(st.st_mtime)
        if mtime > ago:
            print("True:  ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y"))
            shutil.move(path, dest)
            # this is actual move

以下代码段完全错误且不必要:

for fname in os.listdir(created):
    if mtime > ago:                   
        shutil.move(path, dest)
        print "moved to dest", fname

这里mtimepathdest不依赖于循环变量fname,所以不清楚为什么我们需要在这里循环以及目的是什么此片段的行为。

请注意,您的函数 find_info()(我们实际上也不需要)returns 没什么:此函数 prints TrueFalse 而不是 返回 它。