Замените ошибочный байт `0x9b` строкой, чтобы его можно было легко найти с помощью ctrl+f [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Замените ошибочный байт `0x9b` строкой, чтобы его можно было легко найти с помощью ctrl+f [дубликат]

Сообщение Anonymous »

Замена ошибочного байта некоторой строкой текста. Это код, который я использую для чтения CSV.

Код: Выделить всё

    with open(file, "r", newline="") as f:
reader = csv.reader(f)
rows = [row[0].split("\t") for row in reader if row]
return rows
При чтении файла CSV возникает следующая ошибка:

Код: Выделить всё

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1904: character maps to 
Я видел в комментарии, что если вы передадите error=ignore, вы проигнорируете все неверные строки. Я посмотрел документацию, и ошибки="replace" заменят неверные данные 0x9d вопросом?. Итак, теперь открыто это: open(file, "r", newline="", error="replace") но я получаю ту же ошибку с другим байтом.

Код: Выделить всё

UnicodeEncodeError: 'charmap' codec can't encode character '\ufffd' in position 0: character maps to 
Итак, я продолжил поиск и нашел это. Итак, очевидно, что \ufffd предназначен для UTF-16, поэтому я передал кодировку="UTF-16" для открытия, и теперь это так: open(file, "r", newline="", error="replace",coding="UTF-16") и теперь новая ошибка.

Код: Выделить всё

UnicodeError: UTF-16 stream does not start with BOM
Итак, я думаю, это не кодировка UTF-16. Итак, я понял, что мне нужно получить кодировку файла. Я осмотрелся еще больше и обнаружил, что класс UnicodeDammit из Beautiful Soup позволяет вам выяснить, что такое кодировка. Итак, я установил это и сделал это.

Код: Выделить всё

with open(path, "r") as f:
uni = UnicodeDammit("\n".join(f.readlines()))
print(uni.original_encoding)
Но невозможно сказать, что проблема в 0x9d. Поэтому я обновил его до этого.

Код: Выделить всё

with open(path, "r", errors="replace") as f:
uni = UnicodeDammit("\n".join(f.readlines()))
print(uni.original_encoding)
Что дает мне бесцеремонный вывод None. На данный момент я растерян и не уверен, каковы мои следующие шаги. Но конечная цель состоит в том, чтобы заменить 0x9b чем-то вроде XXXXXXX или ?, например, что делает error="replace", чтобы его можно было легко найти. Если возможно, я бы предпочел первый с длинной строкой X, поскольку это упрощает задачу, поскольку файл csv уже содержит? как часть его данных. Спасибо за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -with-ctrl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как обнаружить ошибочный класс DataContract?
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как обнаружить ошибочный класс DataContract?
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Ошибочный генератор OpenAPI создает нулевые элементы массива
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как нажать CTRL+T и CTRL+TAB в Selenium WebDriver с помощью Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    61 Просмотры
    Последнее сообщение Anonymous
  • Как нажать CTRL+T и CTRL+TAB в Selenium WebDriver с помощью Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»