Найти - Пользователи
Полная версия: Кодировка Unicode в модуле os.path
Начало » Python для новичков » Кодировка Unicode в модуле os.path
1
WorldInPython

Доброго всем времени!

Я несколько месяцев осваиваю python. Использую интерпретатор python 3.3 cо средой разработки PyCharm.

Вопрос простой, но решительно поставил меня в тупик.
Есть файл с именем setting.ini, он лежит в папке С:\Моя программа на питоне\. Папка с проектом С:\Моя программа на питоне\start.py
Итак в файле программы start.py я хочу проверить существует ли файл setting.ini в папке С:\Моя программа на питоне\.
Делаю так:
# -*- coding: utf-8 -*-
ROOT_PATH = os.getcwd() # путь до каталога исполняемого скрипта
file_setting_path = (ROOT_PATH + “\\Setting.ini”) # абсолютный путь до файла настроек
if os.path.exists(file_setting_path) in not True: # на это строке ошибка! *
print(“файла нет”)
else:
print(“файл есть”)

Но при запуске скрипта получаю такую ошибку:
UnicodeEncodeError: ‘latin-1’ codec can't encode characters in position 10-22: ordinal not in range(256) на строке *
Также не открываются файлы, в пути которых содержаться русские буквы.
Как можно победить такое неудобство?
Имена файлов писать только латиницей не подходит, т.к. программу пишу для пользователей, которые могут скопировать файлы программы в любой путь на ПК под управлением Windows.

Спасибо!
4kpt_II
if os.path.exists(file_setting_path) in not True
Мне бы такое и в страшном сне не приснилось…
Переведу “существует путь не в истине”

Проверте, что возвращает этот метод

print(os.path.exists(file_setting_path))

Когда файл есть и когда его нет. После этого сможете построить корректное логическое выражение…

P.S. Не забывайте оборачивать код в теги.
doza_and
# -*- coding: utf-8 -*-
ROOT_PATH = os.getcwd() # путь до каталога исполняемого скрипта 
#-НЕТ это путь к текущей директории - абсолютно разные вещи
file_setting_path = (ROOT_PATH + \\Setting.ini) # абсолютный путь до файла настроек
# используйте os.path.abspath вместо двух предыдущих строк проще и более переносимо.
if os.path.exists(file_setting_path) in not True: # на это строке ошибка! *
print(“файла нет”)
else:
print(“файл есть”)
# достаточно print( “файл есть” if os.path.exists(file_setting_path) else “файла нет”)

Итого: во всех строчках кроме
# -*- coding: utf-8 -*-
странности или ошибки.
WorldInPython
Вы правы, все работает!

Я пишу программу используя библиотеку Qt и если убрать строку:
app = QtGui.QApplication(sys.argv) которая предшествует коду приведенному выше, то все работает!
Видимо QtGui.QApplication(sys.argv) как то переопределяет кодировку файловых путей.

Скажите пожалуйста о каких тегах вы говорите, которыми необходимо оборачивать код?
WorldInPython
doza_and
# -*- coding: utf-8 -*- ROOT_PATH = os.getcwd() # путь до каталога исполняемого скрипта #-НЕТ это путь к текущей директории - абсолютно разные вещи file_setting_path = (ROOT_PATH + “\\Setting.ini”) # абсолютный путь до файла настроек # используйте os.path.abspath вместо двух предыдущих строк проще и более переносимо.

Спасибо! Дельные советы!

Я пока лишь новичек, но python мне очень нравиться, до этого писал 4 года на C#.
Singularity
WorldInPython
Мануал в картинках
WorldInPython
Singularity
WorldInPythonМануал в картинках
Понял, спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB