Удалять промежуточные папки в имени пути к файлу (Python) - PullRequest
0 голосов
/ 15 апреля 2020

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

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

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

Ответы [ 2 ]

1 голос
/ 15 апреля 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)
1 голос
/ 15 апреля 2020

Использование pathlib.Path:

from pathlib import Path

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

Вывод:

/foo/bar

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

...