提问者:小点点

Python-将文档粘贴到目录中的每个文件夹


我在netwrok上有一个年度文件,其中包含基于一年中每个星期的子文件夹。我正在尝试编写一个脚本,它将复制保存在桌面上的“模板”文档,然后遍历年度文件,并将模板粘贴到每个每周的子文件夹中。

我有一个脚本正在生成一个“PermissionError:[Errno 13]Permission denied:”虽然我不知道为什么,因此也不知道该怎么办。

import os
import shutil

myPath = r"""K:\PROCESS\YEAR"""
myDocument = r"""C:\Users\me.domain\OneDrive - Co Name\Desktop\Template.xlsx"""

for filename in os.listdir(myPath):
    with open(os.path.join(myPath,filename)) as myFile:
        copyfile(myDocument, myFile)

错误是,

PermissionError: [Errno 13] Permission denied: ‘K:\PROCESS\YEAR\WEEK 1’

@行“将open(os.path.join(myPath,filename))作为myFile:”

我尝试将目标文档移动到程序根目录,并根据一些建议修改脚本,如下所示。

import os
from shutil import copy2

my_doc_path = "Template.xlsx"
myPath = "K:\PROCESS\YEAR"

for directory in os.listdir(myPath):
    copy2(my_doc_path, directory)

我不再收到任何错误;但是,目标文档没有被复制到目标目录。取而代之的是,如下图所示,在程序根目录中创建了一个带有目标目录名的不伦不类的“文件”。

最终起作用的是:

import os
from shutil import copy

my_doc_path = "Template.xlsx"
myPath = "K:\PROCESS\YEAR"

for directory in os.listdir(myPath):
    
    target_directory = myPath + '\\' + directory
    check_file = target_directory + '\\' + my_doc_path
    
    if not os.path.exists(check_file):
        copy(my_doc_path, target_directory)

共2个答案

匿名用户

与其打开文件,不如尝试将文件复制到目标文件夹中。

from shutil import copy

my_doc_path = "/here/is/my/doc/path.xlsx"
myPath = "K:\PROCESS\YEAR"

for directory in os.listdir(myPath):
    copy(my_doc_path, directory)

或者,如果您还需要元数据:

from shutil import copy2

my_doc_path = "/here/is/my/doc/path.xlsx"
myPath = "K:\PROCESS\YEAR"

for directory in os.listdir(myPath):
    copy2(my_doc_path, directory)

为什么copy/copy2而不是copyfile?看看这个评论

匿名用户

需要附加到myPath变量的文档名。我错误地假设copy2()函数正在寻找保存文档的路径,我没有意识到它需要完整的目标路径,包括文档本身。

谢谢大家的反馈,这让我找到了正确的方向。