在Python

时间:2016-11-03 21:49:32

标签: python datetime directory conditional shutil

我是编程新手,我正在处理一项与使用Python创建脚本来检测过去24小时内创建或修改的文件夹中的文件,然后将这些文件移动到其他目录的任务。

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

    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

对于“移动”功能,我觉得这是正确的想法,但是,不知道要传递的变量,我将括号留空。并且 会返回一个疯狂的布尔列表。如此。

    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)

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

谢谢!

1 个答案:

答案 0 :(得分:0)

你几乎在这里。在检测到特定文件有资格移动后(即在shutil.move之前/之后/而不是print("True: ", fname, " at ", mtime.strftime("%H:%M %m/%d/%Y"))),只需调用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

以下代码段完全错误,没有必要:

mtime

此处pathdestfname并不依赖于循环变量find_info(),因此我们不清楚为什么我们需要循环以及预期的内容这个片段的行为。

请注意,您的函数True(我们实际上并不需要)不返回任何内容:此函数打印 False MeasNo X Y Date Ano POS 1 10 2 01JAN16 1 L 2 11 4 01JAN16 1 L 3 12 3 01JAN16 1 L 4 13 5 01JAN16 1 L 5 14 6 01JAN16 1 L 6 15 3 01JAN16 1 L 7 16 4 01JAN16 1 L 8 17 7 01JAN16 1 L 9 18 8 01JAN16 1 L 10 19 4 01JAN16 1 L 11 20 6 01JAN16 1 L 12 21 3 01JAN16 1 L 13 22 2 01JAN16 1 L 14 23 7 01JAN16 1 L 15 24 9 01JAN16 1 L 16 25 6 01JAN16 1 L 17 26 5 01JAN16 1 L 18 27 4 01JAN16 1 L 19 28 3 01JAN16 1 L 20 29 5 01JAN16 1 L 21 30 4 01JAN16 1 L 22 31 7 01JAN16 1 L 23 32 8 01JAN16 1 L 24 33 7 01JAN16 1 L 25 34 9 01JAN16 1 L 26 35 8 01JAN16 1 L 27 36 6 01JAN16 1 L 28 37 7 01JAN16 1 L 29 38 5 01JAN16 1 L 30 39 4 01JAN16 1 L 1 10 4 01JAN16 1 R 2 11 6 01JAN16 1 R 3 12 5 01JAN16 1 R 4 13 7 01JAN16 1 R 5 14 8 01JAN16 1 R 6 15 5 01JAN16 1 R 7 16 6 01JAN16 1 R 8 17 9 01JAN16 1 R 9 18 10 01JAN16 1 R 10 19 6 01JAN16 1 R 11 20 8 01JAN16 1 R 12 21 5 01JAN16 1 R 13 22 4 01JAN16 1 R 14 23 9 01JAN16 1 R 15 24 11 01JAN16 1 R 16 25 8 01JAN16 1 R 17 26 7 01JAN16 1 R 18 27 6 01JAN16 1 R 19 28 5 01JAN16 1 R 20 29 7 01JAN16 1 R 21 30 6 01JAN16 1 R 22 31 9 01JAN16 1 R 23 32 10 01JAN16 1 R 24 33 9 01JAN16 1 R 25 34 11 01JAN16 1 R 26 35 10 01JAN16 1 R 27 36 8 01JAN16 1 R 28 37 9 01JAN16 1 R 29 38 7 01JAN16 1 R 30 39 6 01JAN16 1 R 1 10 1 31JAN16 1 L 2 11 3 31JAN16 1 L 3 12 2 31JAN16 1 L 4 13 4 31JAN16 1 L 5 14 5 31JAN16 1 L 6 15 2 31JAN16 1 L 7 16 3 31JAN16 1 L 8 17 6 31JAN16 1 L 9 18 7 31JAN16 1 L 10 19 3 31JAN16 1 L 11 20 5 31JAN16 1 L 12 21 2 31JAN16 1 L 13 22 1 31JAN16 1 L 14 23 6 31JAN16 1 L 15 24 8 31JAN16 1 L 16 25 5 31JAN16 1 L 17 26 4 31JAN16 1 L 18 27 3 31JAN16 1 L 19 28 2 31JAN16 1 L 20 29 4 31JAN16 1 L 21 30 3 31JAN16 1 L 22 31 6 31JAN16 1 L 23 32 7 31JAN16 1 L 24 33 6 31JAN16 1 L 25 34 8 31JAN16 1 L 26 35 7 31JAN16 1 L 27 36 5 31JAN16 1 L 28 37 6 31JAN16 1 L 29 38 4 31JAN16 1 L 30 39 3 31JAN16 1 L 1 10 4 31JAN16 1 R 2 11 6 31JAN16 1 R 3 12 5 31JAN16 1 R 4 13 7 31JAN16 1 R 5 14 8 31JAN16 1 R 6 15 5 31JAN16 1 R 7 16 6 31JAN16 1 R 8 17 9 31JAN16 1 R 9 18 10 31JAN16 1 R 10 19 6 31JAN16 1 R 11 20 8 31JAN16 1 R 12 21 5 31JAN16 1 R 13 22 4 31JAN16 1 R 14 23 9 31JAN16 1 R 15 24 11 31JAN16 1 R 16 25 8 31JAN16 1 R 17 26 7 31JAN16 1 R 18 27 6 31JAN16 1 R 19 28 5 31JAN16 1 R 20 29 7 31JAN16 1 R 21 30 6 31JAN16 1 R 22 31 9 31JAN16 1 R 23 32 10 31JAN16 1 R 24 33 9 31JAN16 1 R 25 34 11 31JAN16 1 R 26 35 10 31JAN16 1 R 27 36 8 31JAN16 1 R 28 37 9 31JAN16 1 R 29 38 7 31JAN16 1 R 30 39 6 31JAN16 1 R 代替返回它。