Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© 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.                                ѓ€‘: ‚Ё¤ ЇҐаҐ¤ ў Ґ¬ле ¤ ­­ле

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

18

День добрый!

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

0
Е

Вот код:


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_())
0

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

0
Е
  • Вот здесь:
  • 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, а когда попадается файл с "абракадаброй" программа вылетает 
    0

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

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

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

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

    0
    Е
    codecs подчеркивается
    0
    import codecs
    0
    Е
    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()
    0
    Е

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

    0
    import codecs

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

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

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

    app = QtWidgets.QApplication(sys.argv)
    0
    Е

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

    0

    А что пишет?

    0

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

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

    Process finished with exit code 3

    0
    Е

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

    0
    Е

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

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

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

    0

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

    0

    Ответы

    Только авторизованные пользователи могут отвечать на форуме.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    ДД
    13 декабря 2018 г. 16:24
    Дмитрий Дубовик

    C++ - Тест 005. Структуры и Классы

    • Результат:66баллов,
    • Очки рейтинга-1
    13 декабря 2018 г. 16:04
    Metelev

    Qt - Тест 001. Сигналы и слоты

    • Результат:47баллов,
    • Очки рейтинга-6
    YC
    12 декабря 2018 г. 18:49
    Yaroslav Chernetskyi

    Qt - Тест 001. Сигналы и слоты

    • Результат:31баллов,
    • Очки рейтинга-10
    Последние комментарии
    V
    15 декабря 2018 г. 2:06
    Vlad15007

    Спасибо большое!Очень помогли!
    11 декабря 2018 г. 21:01
    Евгений Легоцкой

    Не знаю, какой-там конкретно эффект и если честно не хочется fl studio ради того, чтобы посмотреть устанавливать, но из того, что увидел в интернете. Предполагаю, что то, что вы хотите с...
    V
    11 декабря 2018 г. 19:25
    Vlad15007

    Подскажите пожалуйста ( я новичок совсем)Можно ли организовать спрайт без этого окошка (как в fl studio fruity dance)?
    11 декабря 2018 г. 15:06
    Евгений Легоцкой

    Что интересно, если написать так from <application_name>.<module_name> import <filename> ,то PyCharm сносит крышу, если разрабатываешь в рамках проекта приложение, ко...
    11 декабря 2018 г. 14:52
    Илья Чичак

    Тут мне тоже есть что сказать=) Сами разрабы советуют импортировать следующим образом: from <application_name> import <module_name> Стоит избегать from . import &l...;
    Сейчас обсуждают на форуме
    ИМ
    18 декабря 2018 г. 15:29
    Игорь Максимов

    Доброго времени суток. Имеется модель для видео-контента (Movie), а конкретно привязана сейчас к одной модели(Compilation). Появилась необходимость добавить еще одну модель (Category) и связа...
    R
    18 декабря 2018 г. 12:25
    RED_Spider

    именно так, проблема в кодировке, а именно в отсутствии шрифтов на сервере, для меня вопрос решился в CentOS 7yum install curl cabextract xorg-x11-font-utils fontconfig всем спасибо за ...
    U
    18 декабря 2018 г. 10:39
    Unreal_man

    А вот этот коннект здесь и вовсе не нужен connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText); А как же без него? ============================== ...
    m
    17 декабря 2018 г. 19:03
    melnik10

    Спасибо, попробую!
    R
    16 декабря 2018 г. 14:41
    RED_Spider

    перевірено все працює http://doc.qt.io/qt-5/appicon.html Setting the Application Icon on Windows First, create an ICO format bitmap file that contains the icon image. This ca...
    Присоединяйтесь к нам в социальных сетях

    Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы