我正在尝试编写一个将某些文件从源文件夹复制到目标文件的python脚本,但是只应复制新创建的文件。 例如,源文件夹包含2005文件,目标文件夹包含2000个文件,我的脚本应该复制5个丢失的文件
在下面的脚本中,逻辑是记录扩展名为“.extension”的文件的修改时间,然后尝试获取并在下一步中进行比较
import sys, os, shutil
import glob
import os.path, time
fob = open(r"C:\Python\Log.txt","a")
dir_src = r"C:\Python\Source"
dir_dst = r"C:\Python\Dest"
for w in os.listdir(dir_src):
if w.endswith('.extenstion'):
pathname = os.path.join(dir_src, w)
if not Date_File in (fob):
shutil.copy2(pathname, dir_dst)
fob.write("File Name: %s" % os.path.basename(pathname))
fob.write(" Last modified Date: %s" % time.ctime(os.path.getmtime(pathname)))
fob.write(" Copied On: %s" % time.strftime("%c"))
fob.write("\n")
fob.close()
os.system("PAUSE")
我找不到比较日期的方法,并检查是否应该复制文件。
欢迎任何其他方法。
答案 0 :(得分:1)
您应该能够通过执行list(set(os.listdir(dir_src)) - set(os.listdir(dir_dst)))
从源文件夹中删除目标文件夹的现有文件,并遍历此列表。
答案 1 :(得分:1)
虽然您的比较文件可行,但我认为在这种情况下,更好的方法是比较两个文件的getmtime
值。由于文件在源目录和目标目录中具有相同的名称,因此您可以在目标目录中对同一文件名执行getmtime
查找。
如果文件不存在,您应该获得os.error
,这意味着您无论如何都必须复制该文件。
如果目标目录中的文件被修改的时间早于源目录中的文件(所以getmtime(src_file) > getmtime(dest_file)
),那么您也知道要将其复制。
如果你愿意,你当然可以记录它。您也可以放弃整个过程并使用rsync
或其他东西。
答案 2 :(得分:0)
除了这个逻辑,你可以做的是, 您可以在源路径和目标路径中找到文件的纪元时间(使用os.path.getmtime()方法),然后进行比较。如果源路径中的文件具有上次修改时间的更大纪元值,则可以将其复制到目标路径中。