【发布时间】:2016-11-03 21:49:31
【问题描述】:
我是编程新手,我正在处理一项与使用 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
对于“移动”函数,我觉得这是正确的想法,但是由于不知道要传递的变量,我将括号留空。 that 返回一个疯狂的长布尔值列表。所以。
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)
我不确定将哪些变量传递给函数。之后,我正在打印目录以查看文件是否确实已传输。该死的东西不会动。
谢谢!!
【问题讨论】:
-
您能解释一下,您是如何使用
shutil.move的吗?它出了什么问题?错误信息等?另外,请注意带有反斜杠的路径可能会被错误地解释为反斜杠具有特殊含义(例如在\n中),因此您必须将其转义"c:\\Users\\…"或(更好)使用os.path.join。 -
我刚刚更改了我的代码,我将它与原始消息一起放在上面;使用 shutil.move,它只是不移动文件!我正在让程序打印源目录和目标目录,但没有进行传输。
标签: python datetime directory conditional shutil