Удалите промежуточные папки в имени пути к файлу (Python)

У меня есть путь /foo/bar/poo/car и есть файлы в каталоге car. Я хочу получить /foo/bar с теми же файлами в bar. Я понял, что это неправильно, поскольку он не поддерживает файлы:

>>> import os
>>> os.path.dirname(os.path.dirname('/foo/bar/poo/car'))
'/foo/bar'

Я предполагаю, что мне придется сначала переместить файлы из машины в бар, а затем сделать вышеописанное? Есть ли более чистый или простой способ выполнить это?


person user1394    schedule 15.04.2020    source источник
comment
Проверьте эту ссылку: Как переместить n каталогов в Pythonic?   -  person tidakdiinginkan    schedule 15.04.2020
comment
@CavinDsouza Извините, я только что отредактировал вопрос.   -  person user1394    schedule 15.04.2020


Ответы (2)


Используйте pathlib.Path:

from pathlib import Path

p = Path('/foo/bar/poo/car')
bar = p.parent.parent
print(bar)

Выход:

/foo/bar

Для перемещения файлов используйте shutil.move.

person Lutz Horn    schedule 15.04.2020

Сначала вы должны получить абсолютные пути ко всем файлам с помощью glob. Затем вы можете переместить эти файлы с помощью Shutil.move

import glob
import os
import shutil


source_dir = r'R:/foo/bar/poo/car'
dest_dir = r'R:/foo/bar'

# get all file path
all_files_path = glob.glob(os.path.join(source_dir, '*.*'))

# move the files to the new dir
for file_path in all_files_path:
    shutil.move(file_path, dest_dir)
person Mace    schedule 15.04.2020