Как скопировать несколько файлов с использованием подстановочных знаков в Python?

Я пытаюсь скопировать файлы из одной папки в другую, используя несколько исходных местоположений и подстановочные знаки как часть имен файлов, но по какой-то причине glob.glob не работает, как я ожидал (только один файл подстановочный знак, но версия снимка меняется) - ошибка need string or buffer, list found,

Часть кода Python для этого выглядит следующим образом:

content=[]
tomcatFiles=[]

def addToContent(srcFile, destFile):
    info={'src': srcFile, 'dest': destFile}
    content.append(info)

def addToTomcatFile(srcFile, destFile):
    info={'src': srcFile, 'dest': destFile}
    tomcatFiles.append(info)

def main():
    baseDir=sys.argv[1]
    intellijProjDir=sys.argv[2]

    deploy_dir=baseDir+'/TransferFiles'
    working_dir=intellijProjDir
    tomcatDir=deploy_dir+"/tomcat"

    addToTomcatFile('/project1/target/project1*.war', '/tomcat/project1.war')
    addToTomcatFile('/project2/target/project2*.war', '/tomcat/project2.war')
    addToTomcatFile('/projectX/target/projectX*.war', '/tomcat/projectX.war')

    for infoObj in tomcatFiles:
        addToContent(infoObj['src'], infoObj['dest'])

    for infoObj in content:
        shutil.copy2(glob.glob(working_dir + infoObj['src']), deploy_dir + infoObj['dest'])
        print('Copied ' + infoObj['dest'])

2 ответа

Решение

shutil.copy2 требует строку (или буфер) для его src аргумент, а не список. Поскольку вы уверены, что будет только один матч, получите первый предмет, возвращенный glob.globт.е. glob.glob(...)[0],

1

Как это:

for f in glob.glob('foo*'):
    shutil.copy2(f, 'bar')
0
Другие вопросы по тегам