我的Python脚本在复制时忽略文件

时间:2016-12-01 18:58:16

标签: python copy shutil

基本上我想在我的脚本中做的是将一些文件从dest_path复制到source_path。您可以进行设置并查看其工作原理 -

但由于某种原因,它会复制第一个文件并告诉我其余部分已被复制,但事实并非如此。有什么东西我没有看到或我做错了吗?我对python很新,很抱歉如果我做了一些明显错误的事情,我就是看不到它......

import time, shutil, os, datetime

source_path = r"C:\SOURCE"                              # Your Source path
dest_path = r"C:\DESTINATION"                           # Destination path
file_ending = '.txt'                                    # Needed File ending
files = os.listdir(source_path)                         # defines
date = datetime.datetime.now().strftime('%d.%m.%Y')     # get the current date

while True:
    print("Beginning checkup")
    print("=================")
    if not os.path.exists(source_path or dest_path): # checks if directory exists
        print("Destination/Source Path does not exist!")
    else:
        print("Destination exists, checking files...")
        for f in files:
            if f.endswith(file_ending):
                new_path = os.path.join(dest_path, date, )
                src_path = os.path.join(source_path, f)
                if not os.path.exists(new_path): # create the folders if they dont already exists
                    print("copying " + src_path)
                    os.makedirs(new_path)
                    shutil.copy(src_path, new_path)
                else:
                    print( src_path + "  already copied")
                   # shutil.copy(src_path, new_path)

    print("=================")
    print('Checkup done, waiting for next round...')
    time.sleep(10) # wait a few seconds between looking at the directory

1 个答案:

答案 0 :(得分:2)

像@ user2357112提到if not os.path.exists(source_path or dest_path)没有按照你的想法行事。改为

if not os.path.exists(source_path) or not os.path.exists(dest_path):

这只会复制一个文件,因为它会在new_path中第一次创建目录if。这样的事情应该有效:

if f.endswith(file_ending):
    new_path = os.path.join(dest_path, date, )
    src_path = os.path.join(source_path, f)
    if not os.path.exists(new_path): # create the folders if they dont already exists
        os.makedirs(new_path)
    if not os.path.exists(os.path.join(new_path,f)):
        print("copying " + src_path)
        shutil.copy(src_path, os.path.join(new_path,f))
    else:
        print( src_path + "  already copied")

如果new_path目录不存在则创建目录(这应该只发生一次,此if可以移出循环以及new_path初始化)。在单独的if检查文件是否存在于该目录中,如果没有将文件复制到该位置,则打印您的消息。