Сохраните файл в выходной папке, создав его, если он не существует - PullRequest
0 голосов
/ 14 июля 2020

Я использую библиотеку pathlib для обработки ввода-вывода в моем скрипте. Я прочитал файл с путем:

PosixPath('input/ADE/data_f34.dat')

Родительская папка input/ зафиксирована, но ни подпапка (ADE), ни имя файла не фиксируются, т.е. они меняются с каждым итерация. Мне нужен общий для хранения файла новый с тем же именем по пути:

PosixPath('output/ADE/data_f34.dat')

Т.е., уважая подпапку и имена файлов , но изменив input/ на output/. Папка output всегда существует, но я априори не знаю, существует ли подпапка output/ADE/, поэтому мне нужно создать, если это не так. Если файл с таким именем уже существует, я могу просто перезаписать его.

Как правильно справиться с этим с помощью pathlib?

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Это то, что вы ищете?

import pathlib

src = pathlib.PosixPath('input/ADE/data_f34.dat')
dst = pathlib.Path('output', *src.parts[1:])
dst.parent.mkdir(parents=True, exist_ok=True)
with open(dst, 'w') as d, open(src) as s:
    d.write(s.read())
1 голос
/ 14 июля 2020

Вы можете использовать relative_to :

from pathlib import PosixPath

filename = PosixPath('input/ADE/data_f34.dat')
output_dir = PosixPath('output')

path = output_dir / filename.relative_to('input')
path.parent.mkdir(parents=True, exist_ok=True)

print(path)

Печать

output/ADE/data_f34.dat
...