Перемещение всего содержимого одного каталога в другой в Python - PullRequest
0 голосов
/ 24 апреля 2020

Я пытался понять это часами без удачи. У меня есть список каталогов, которые имеют подкаталоги и другие собственные файлы. Я пытаюсь пройти через все из них и переместить весь их контент в указанное c местоположение. Я попробовал shutil и glob, но не смог заставить его работать. Я даже пытался запускать команды оболочки, используя subprocess.call, и это тоже не работало. Я понимаю, что это не сработало, потому что я не смог применить его должным образом, но я не смог найти никакого решения, которое бы перемещало все содержимое каталога в другой.

files = glob.glob('Food101-AB/*/')
dest = 'Food-101/'

if not os.path.exists(dest):
    os.makedirs(dest)
    subprocess.call("mv Food101-AB/* Food-101/", shell=True)

    # for child in files:
    #   shutil.move(child, dest)

Я пытаюсь переместить все в Food101-AB для Food-101

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

shutil модуль стандартной библиотеки - это путь к go:

>>> import shutil
>>> shutil.move("Food101-AB", "Food-101")

Если вы не хотите перемещать Food101-AB саму папку, попробуйте использовать это:

import shutil
import os

for i in os.listdir("Food101-AB"):
    shutil.move(os.path.join("Food101-AB", i), "Food-101")

Для получения дополнительной информации о функции move: https://docs.python.org/3/library/shutil.html#shutil .move

1 голос
/ 24 апреля 2020

Попробуйте изменить call функцию на run, чтобы получить stdout, stderr и return code для вашей команды оболочки:

from subprocess import run, CalledProcessError
source_dir = "full/path/to/src/folder"
dest_dir = "full/path/to/dest/folder"
try:
    res = run(["mv", source_dir, dest_dir], check=True, capture_output=True)
except CalledProcessError as ex:
    print(ex.stdout, ex.stderr, ex.returncode)

...