Формирование path c помощью os.path.join
Подскажите все ли корректно при формировании path c помощью os.path.join по получаю обратный слеш перед именем файла. Как сделать что бы путь был корректный виндовый.
with os.scandir(dirname) as files:
for file in files:
if file.is_file():
print(os.path.join(dirname, file.name))
Результат:
C:/Users/Пользователь/Desktop/XXXXX\icon.ico
Ответы (3 шт):
Я бы перешел на pathlib
Тут сразу будет путь от директории:
from pathlib import Path
...
for file in Path(dirname).iterdir():
if file.is_file():
print(file)
Если нужно путь сложить, то это можно сделать через оператор /, типа:
file_name = '1.txt'
path = Path(dirname) / 'src' / file_name
А направление слэша (/ или \) будет от текущей системы учитываться
Единственное то, что file будет не строкой, а объектом со своими полями и методами, питоничьи функции из коробки (типа open, os.path.*, shututil.*) умеют с ним работать, но если нужно получить именно строку, то нужно в str оборачивать: str(file)
Как вариант, можно сделать так:
os.path.join(os.getcwd(), os.path.basename(filename))
Получаем текущую папку, затем берём название файла и соединяем в единый путь. Получать папку необязательно, главное корректно получить путь к ней, например: os.path.normpath(path)
Т.е. в вашем случае получится так:
dirname = os.path.normpath(dirname)
with os.scandir(dirname) as files:
for file in files:
if file.is_file():
print(os.path.join(dirname, os.path.basename(file.name)))
И как уже отметили, можно действительно воспользоваться Pathlib.
Всем спасибо.
Как правильно заметил vitidev, действительно получается слеши слева не "виндовые", я их получаю из
dirname = QFileDialog.getExistingDirectory(self, "Выберите каталог с исходными файлами")
добавил
dirname = QtCore.QDir.toNativeSeparators(dirname)
Теперь путь стал красивым:
C:\Users\Пользователь\Desktop\XXXXX\icon.ico