Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2013 16:38:32

WorldInPython
Зарегистрирован: 2013-11-30
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path


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

Я несколько месяцев осваиваю 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.

Спасибо!

Офлайн

#2 Ноя. 30, 2013 16:51:48

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path

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

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

print(os.path.exists(file_setting_path))

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

P.S. Не забывайте оборачивать код в теги.

Отредактировано 4kpt_II (Ноя. 30, 2013 17:05:01)

Офлайн

#3 Ноя. 30, 2013 17:12:50

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path

# -*- 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 -*-
странности или ошибки.



Отредактировано doza_and (Ноя. 30, 2013 17:13:16)

Офлайн

#4 Ноя. 30, 2013 17:27:21

WorldInPython
Зарегистрирован: 2013-11-30
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path

Вы правы, все работает!

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

Скажите пожалуйста о каких тегах вы говорите, которыми необходимо оборачивать код?

Офлайн

#5 Ноя. 30, 2013 17:29:10

WorldInPython
Зарегистрирован: 2013-11-30
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path

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

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

Я пока лишь новичек, но python мне очень нравиться, до этого писал 4 года на C#.

Офлайн

#6 Ноя. 30, 2013 17:33:41

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path

Офлайн

#7 Ноя. 30, 2013 18:05:52

WorldInPython
Зарегистрирован: 2013-11-30
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка Unicode в модуле os.path

Singularity
WorldInPythonМануал в картинках
Понял, спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version