© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
24 сентября 2018 г. 16:47

Чтение файлов в python

Добрый вечер Евгений и форумчане! Столкнулся с проблемой чтения файлов в python: файлы с обычным текстом в формате las и txt читаются, например:

~Version information
VERS.                            1.20: CWLS LAS  -  VERSION 1.20
WRAP.                              NO: One line per depth step

~Well information

Но если текст такого вида (с абракадаброй):

~Version information block
VERS.                             1.20:Ќ з «м­ п Ј«гЎЁ­  § ¬Ґа
WRAP.                       137.60:Љ®­Ґз­ п Ј«гЎЁ­  § ¬Ґа
TYPE.                                ѓ€‘: ‚Ё¤ ЇҐаҐ¤ ў Ґ¬ле ¤ ­­ле

программа вылетает. Не подскажите как лечится?

День добрый!

А киньте код вашей программы, который отвечает за чтение. Возможно, что вы как-то криво читаете кодировку. Может там кодировка, которая имеет меньше байт на символ, которую вы используете, поэтому и вылетает за пределы текстового массива указатель при чтении.

Для Django рекомендую VDS-хостинг TIMEWEB


Вот код:


import sys

from re import match

from vira import *
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (QDialog, QFileDialog, QMessageBox, QLineEdit, QProgressBar, QProgressDialog)
from PyQt5.QtCore import QDir, QDirIterator


class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)

# Вешаем на кнопку функцию Open
self.ui.pushButton.clicked.connect(self.Open)
self.ui.pushButton_2.clicked.connect(self.close)

def Open(self):
self.ui.textEdit.clear()
files, _ = QFileDialog.getOpenFileNames(self, "Выбрать файлы", "/home", "*.las *.txt")
hjh = list(filter(lambda x: x != '*.las *.txt', files))
myString = '\n'.join(hjh)
self.ui.textEdit.setText(myString)
if self.ui.comboBox.currentIndex() == 0:
strx = self.ui.textEdit.toPlainText()
strxList = strx.split('\n')

for jk in range(0, len(strxList), 1):
print(strxList[jk])
self.ui.textEdit.append(str(strxList[jk]))
f = open(strxList[jk], 'r')
for line in f:
print(line)
self.ui.textEdit.append(line)
f.close()

if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())

Извиняюсь, не проверил код у себя ещё. В каком именно месте падает? Вы определили это?

Для Django рекомендую VDS-хостинг TIMEWEB

  • Вот здесь:
  • for jk in range(0, len(strxList), 1):
  • print(strxList[jk])
  • self.ui.textEdit.append(str(strxList[jk]))
  • f = open(strxList[jk], 'r')
  • for line in f:
  • print(line)
  • self.ui.textEdit.append(line)
  • f.close()
  • strxList - это список файлов считанный с textedit, когда начинаю перебирать каждый элемент списка нормальные файлы читаются и выводятся в консоль и textedit, а когда попадается файл с "абракадаброй" программа вылетает 

    Похоже, что здесь сам вывод print у Python крашится из-за кодировки символов.

    Попрбуйте установить кодировку для потока вывода.

    Что вроде такого может быть

    UTF8Writer = codecs.getwriter('utf8')
    sys.stdout = UTF8Writer(sys.stdout)

    Для Django рекомендую VDS-хостинг TIMEWEB

    codecs подчеркивается
    import codecs

    Для Django рекомендую VDS-хостинг TIMEWEB

    import codecs
    for jk in range(0,len(strxList),1):
    print(strxList[jk])
    self.ui.textEdit.append(str(strxList[jk]))
    UTF8Writer = codecs.getwriter ('utf8')
    sys.stdout = UTF8Writer (sys.stdout)
    f = open(strxList[jk], 'r')
    for line in f:
    print(line)
    self.ui.textEdit.append(line)
    f.close()

    Я правильно скомпоновал код?

    import codecs

    Я бы добавил в самом начале файла

    UTF8Writer = codecs.getwriter ('utf8')
    sys.stdout = UTF8Writer (sys.stdout)

    А это я думаю, стоит добавить перед ээтой строкой

    app = QtWidgets.QApplication(sys.argv)

    Для Django рекомендую VDS-хостинг TIMEWEB

    Программа вообще не запускается

    А что пишет?

    Для Django рекомендую VDS-хостинг TIMEWEB

    Так, а если тогда просто файл открывать с учётом кодировки?

    f = codecs.open(filename, encoding="utf-8")

    Для Django рекомендую VDS-хостинг TIMEWEB

    Process finished with exit code 3

    Опять вылетает

    Решение найдено:

    f = codecs.open (strxList[jk], 'r', encoding='cp866')

    Спасибо Евгений Вам за то что направили на путь истинный!

    Пожалуйста, успехов.

    Для Django рекомендую VDS-хостинг TIMEWEB

    Ответы

    Только авторизованные пользователи могут отвечать на форуме.
    Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
    15 октября 2018 г. 21:36
    Allyans .

    C++ - Тест 001. Первая программа и типы данных

    • Результат 60баллов,
    • Очки рейтинга-1
    15 октября 2018 г. 11:25
    Екатерина Самойлова

    C++ - Тест 002. Константы

    • Результат 33баллов,
    • Очки рейтинга-10
    15 октября 2018 г. 11:17
    Екатерина Самойлова

    C++ - Тест 006. Перечисления

    • Результат 80баллов,
    • Очки рейтинга4
    Последние комментарии
    16 октября 2018 г. 16:14
    pasagir

    Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

    В Qt 5.11. при попытке вставить в БД запись выдает ошибку QSqlQuery::prepare: database not openQSqlDatabasePrivate::database: requested database does not belong to the calling thread. ...
    10 октября 2018 г. 9:50
    Евгений Легоцкой

    Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

    Если и начинать писать о плагинах, то нужно тогда с Qt Creator начинать, там наверняка будет одинаковый принцип, но по Qt Creator хотя бы информация есть.
    10 октября 2018 г. 9:48
    ost.vld

    Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

    О плагинах к QtCreator в целом, тоже интересно.
    10 октября 2018 г. 9:46
    ost.vld

    Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

    ну типа того, создание программы, функционал которой можно расширять плагинами, и, в перспективе, создание API.
    Сейчас обсуждают на форуме
    15 октября 2018 г. 12:45
    Allyans .

    QGraphicsItem change color

    Хорошо)
    11 октября 2018 г. 10:13
    Arrow

    Работа с WebView в QML

    Нашел в чем проблема. Пишу на случай если кому-то попадется такое же счастье с WebView как и мне. Проблема как оказалась с Debug версией, так как в Release и Profile все работает (...
    10 октября 2018 г. 12:49
    Виталий Антипов

    Кто что делает на Qt?

    Работаем по локальной сети. Файл базы, схемы и фото лежат на сервере. Чтобы не было проблем при одновременной работе с одним файлом, все запросы обернул в транзакции, как указано в документаци...
    10 октября 2018 г. 11:21
    Arrow

    Редактирование записи на форуме

    Добрый день! К сожалению встретил небольшой баг на форуме. При создании записи на форуме и вставке кода, через соответствующую кнопку номера строк проставляются верно, но каждый...
    10 октября 2018 г. 9:46
    Arrow

    Настройка Qt Creator для Android

    Я Genymotion  ставил с VBox в комплекте для личного использования, после добавил из списка телефон с нужным API. Запустил его и при компиляции Qt Creator сам нашел его и все запустилось...
    Присоединяйтесь к нам в социальных сетях