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

My Python script ignores files while copying

基本上我想在我的脚本中做的是将一些文件从 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

就像@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):

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

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 中检查该文件是否存在于该目录中,如果不存在,则将文件复制到该位置,否则打印您的消息。