Преобразование os.path в модуль pathlib не работает, как ожидалось

Я пытался заменить os.path новым модулем pathlib. В этих строках os.path работает каждый раз без ошибок, а модуль Pathlib выдает ошибку:

Path' and 'str'
[!] send_logs // Error.. ~ unsupported operand type(s) for +: 'PosixPath' and 'str'

Основная цель этого — записать файл в эту папку; использование Path.is_dir(log_dir) возвращает True. Попытка сделать это через модуль pathlib приводит к ошибке. Я попытался найти другие источники для ответа и пришел к PosixPath как к отдельной переменной для использования в expanduser; напрасно меня привели сюда

Прошу прощения за продвинутость, так как я новичок, и это один из моих первых «проектов»! Вся помощь очень ценится. Я также сталкивался с подобными вопросами, но они были направлены на поиск домашнего каталога, т.е. Path.owner(Path.home())

#log_dir = os.path.expanduser('~') + '/Downloads/'   --- commented out for pathlib/path
p = PosixPath('~' + '/Downloads/')
log_dir = Path.expanduser(Path(p))

Спасибо за помощь, которая была оказана. Удалось заставить его работать с одной строкой: так же, как os.path.expanduser()

log_dir = str(PosixPath('~' + '/Downloads/').expanduser())

person MKT97    schedule 19.01.2020    source источник


Ответы (1)


EDIT: я думаю, вы ищете это:

>>> p = PosixPath('~/films/Monty Python')
>>> p.expanduser()
PosixPath('/home/eric/films/Monty Python')

имейте в виду, что pathlib.Path(somepath) возвращает объект pathlib, но не строку. Чтобы объединить объект pathlib со строкой, используйте либо

str(pathlib.Path(somepath))+"somepath"

или найдите .str или аналогичный метод в документации pathlib.

person kleerofski    schedule 19.01.2020
comment
Спасибо за ответ; я не мог заставить его работать в форме установки «p» до expanduser(). Хотя, дважды перечитав документацию pathlib, я обнаружил, что она работает. - person MKT97; 19.01.2020