我的 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
中检查该文件是否存在于该目录中,如果不存在,则将文件复制到该位置,否则打印您的消息。
基本上我想在我的脚本中做的是将一些文件从 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
中检查该文件是否存在于该目录中,如果不存在,则将文件复制到该位置,否则打印您的消息。