Загрузить txt-файл из ресурсов в Python

У меня есть файл .qrc:


  
    ../icons/Delta.jpg
    ../Languages/English.txt
  

который я компилирую в файл python_rc.py на Python с помощью pyrcc4. В моем коде у меня есть:

import QtGui, python_rc
...
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(':/files/icon'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setWindowIcon(icon)
...
text = codecs.open(':/files/eng', 'r', "utf-8")

... значок загружен без проблем, но для txt-файла я получаю:

IOError: [Errno 22] invalid mode ('rb') or filename: ':/files/eng'

Поэтому мой вопрос: как мне загрузить eng из python_rc? Возможно ли использовать текстовые файлы или только для изображений?

1
nl ja de

2 ответы

Вы можете попробовать следующее:

fd = QtCore.QFile(":/files/eng")
if fd.open(QtCore.QIODevice.ReadOnly | QtCore.QFile.Text):
    text = QtCore.QTextStream(fd).readAll()
    fd.close()

Поскольку файл txt находится в файле Qt resourse, поэтому вы не можете использовать это:

text = codecs.open(':/files/eng', 'r', "utf-8")
3
добавлено
Спасибо за ответ. Проблема с utf-8 возникает, когда я пытаюсь открыть, например, венгерский язык: UnicodeEncodeError: кодек «charmap» не может кодировать символ u '\ u0150' в позиции 0: карты символов до . Я пробовал этот text1 = unicode (текст, «utf-8»), но теперь я получаю это: UnicodeDecodeError: кодек «utf8» не может декодировать байты в позиции 653-655: недопустимые данные. Вы можете мне помочь? PS, когда я открываю файлы с текстом = codecs.open (pathToTxt, 'r', "utf-8") У меня нет этих проблем, но мне это нужно в ресурсах ...
добавлено автор Aleksandar, источник
Кроме того, я не могу перебирать строки за строкой, например, когда она открыта следующим образом: text = codecs.open (pathToTxt, 'r', "utf-8") для строки в тексте: строка печати
добавлено автор Aleksandar, источник
Прости. Я использую только python3.x ... Итак, я не знаю, как бороться с ошибкой кодеков python2.x.Я предлагаю вам использовать python3.x, чтобы избавиться от этих проблем с кодировкой.
добавлено автор zoumi, источник

По какой-то причине этот код работает и не имеет проблем, о которых я упомянул в комментариях в ответе Зуми:

path = ":/languages/eng"
f = QtCore.QFile(path)
if f.open(QtCore.QIODevice.ReadOnly | QtCore.QFile.Text):
    text = QtCore.QTextStream(f)
while not text.atEnd():
    line = unicode(QtCore.QString(text.readLine()))
    #do something with "line" here
f.close()
1
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community