Python中的代码不执行系统命令

2024-05-31 21:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含同名文件的子文件夹的文件夹结构。我想复制包含文件夹层次结构的文件。例如:

path/to/folder/A

包含包含文件backup.txt的子文件夹abc。我想将它们复制到另一个文件夹:

path/to/another/destination

我在windows10中找不到类似的东西。我试图用Python来解决这个问题

运行下面的代码应该将A下的整个结构复制到path/to/another/destination,这样destination将有一个文件夹a(包括a)的副本,但只包含那些包含文件file的子文件夹

代码没有任何作用。它既不在destination中创建文件夹('a'),也不将文件从源复制到目标。似乎没有执行命令:os.mkdiros.makedirsshutil.copy。我在目标中看不到任何新文件夹

from sys import argv, exit
from os.path import split, splitext, join, isdir, exists, normpath
from os import walk, makedirs, mkdir, sep
from shutil import copy

file = argv[1]
source = normpath(argv[2])
dest = normpath(argv[3])
main_fol = source.split(sep)[-1]

for p,_,f in walk(source):
    char_fol = join(*p.split(sep)[-2:])
    new_dest = join(dest, main_fol, char_fol)
    for e in f:
        if file in e:
            if not exists(new_dest):
                mkdir(new_dest)
            copy(join(p,e), new_dest)

编辑

我在D:\source中有一个源文件夹,其中有许多包含文件ElvUI.*的子文件夹。我对copyif not exit ...进行了注释,并在代码中添加了print行:

            # ...
            print("Fom:", join(p,e))
            print("To:", new_dest)
            print("")

当我执行python脚本时:

python copy_files.py ElvUI D:\source D:\destination

我得到了下面的输出。所以它确实能找到文件

Fom: D:\source\Agola\SavedVariables\ElvUI.lua
To: D:\destination\source\Agola\SavedVariables

Fom: D:\source\Agola\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Agola\SavedVariables

Fom: D:\source\Anders\SavedVariables\ElvUI.lua
To: D:\destination\source\Anders\SavedVariables

Fom: D:\source\Anders\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Anders\SavedVariables

Fom: D:\source\Benjo\SavedVariables\ElvUI.lua
To: D:\destination\source\Benjo\SavedVariables

Fom: D:\source\Benjo\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Benjo\SavedVariables

Fom: D:\source\Berni\SavedVariables\ElvUI.lua
To: D:\destination\source\Berni\SavedVariables

Fom: D:\source\Berni\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Berni\SavedVariables

Fom: D:\source\Caroin\SavedVariables\ElvUI.lua
To: D:\destination\source\Caroin\SavedVariables

Fom: D:\source\Caroin\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Caroin\SavedVariables

Fom: D:\source\Cornel\SavedVariables\ElvUI.lua
To: D:\destination\source\Cornel\SavedVariables

Fom: D:\source\Cornel\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Cornel\SavedVariables

Fom: D:\source\Dan\SavedVariables\ElvUI.lua
To: D:\destination\source\Dan\SavedVariables

Fom: D:\source\Dan\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Dan\SavedVariables

Fom: D:\source\Diana\SavedVariables\ElvUI.lua
To: D:\destination\source\Diana\SavedVariables

Fom: D:\source\Diana\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Diana\SavedVariables

Fom: D:\source\Ela\SavedVariables\ElvUI.lua
To: D:\destination\source\Ela\SavedVariables

Fom: D:\source\Ela\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Ela\SavedVariables

Fom: D:\source\Josephine\SavedVariables\ElvUI.lua
To: D:\destination\source\Josephine\SavedVariables

Fom: D:\source\Josephine\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Josephine\SavedVariables

Fom: D:\source\Lindas\SavedVariables\ElvUI.lua
To: D:\destination\source\Lindas\SavedVariables

Fom: D:\source\Lindas\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Lindas\SavedVariables

Fom: D:\source\Lorek\SavedVariables\ElvUI.lua
To: D:\destination\source\Lorek\SavedVariables

Fom: D:\source\Lorek\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Lorek\SavedVariables

Fom: D:\source\Lucjan\SavedVariables\ElvUI.lua
To: D:\destination\source\Lucjan\SavedVariables

Fom: D:\source\Lucjan\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Lucjan\SavedVariables

Fom: D:\source\Margaret\SavedVariables\ElvUI.lua
To: D:\destination\source\Margaret\SavedVariables

Fom: D:\source\Margaret\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Margaret\SavedVariables

Fom: D:\source\Nelia\SavedVariables\ElvUI.lua
To: D:\destination\source\Nelia\SavedVariables

Fom: D:\source\Nelia\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Nelia\SavedVariables

Fom: D:\source\Novak\SavedVariables\ElvUI.lua
To: D:\destination\source\Novak\SavedVariables

Fom: D:\source\Novak\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Novak\SavedVariables

Tags: 文件topath文件夹sourcenewdestinationdest