Используйте / для пути в Windows, а также используйте функции stdlib (glob, os.path и т. д.)

Как заставить Python использовать / в качестве разделителя пути (для glob, os.path и т. д.) даже в Windows?

Я пробовал os.sep = '/', но это не работает:

import os, glob
os.sep = '/'
os.path.sep = '/'

for f in glob.glob('D:/Temp/**/*', recursive=True):
    print(f)
# D:/Temp\New folder
# D:/Temp\New Text Document.txt    

print(os.path.join('D:/', 'Temp', 'hello'))
# D:/Temp\hello

Я хотел бы избежать хаков, таких как добавление .replace('\\', '/') для каждого пути, поэтому связанные вопросы, такие как Почему бы os.path.join не использовать os.path.sep или os.sep? не отвечайте на него.

Я также пробовал:

import posixpath as path
print(path.normpath(path.join('D:\\Temp', 'hello')))
# D:\Temp/hello    # path.join has correctly use forward slashes

но здесь \ не заменяется на /.


person Basj    schedule 03.12.2020    source источник
comment
Почему вы хотите этого?   -  person Thomas    schedule 03.12.2020
comment
Я пишу инструмент резервного копирования @Thomas, который работает с пультами Linux, поэтому я хочу иметь способ представления имен файлов/путей, который не зависит от того, является ли локальная ОС Win или Unix.   -  person Basj    schedule 03.12.2020
comment
Вы не должны импортировать posixpath таким образом в Windows. И если вы это сделаете, меня не удивляет, что normpath больше не обрабатывает его правильно, поскольку он ничего не делает в Linux в отношении косых черт. Вы рассматриваете замену ` \ ` на / как хак, но в Windows оба принимаются как косые черты, поэтому это довольно безопасный подход к нормализации этих путей. Я бы поставил вокруг него специальное условное обозначение для Windows, потому что в Linux `\` можно использовать как разделитель пути, не относящийся к пути. Вы можете попробовать использовать pathlib для абстрагирования путей, но нет способа просто сказать Python всегда использовать / в Windows в функциях stdlib.   -  person facelessuser    schedule 03.12.2020
comment
docs.python.org/3/library/pathlib.html#pathlib. PurePosixPath   -  person Thomas    schedule 04.12.2020