У меня возникли проблемы с использованием читателя unicodecsv. Я продолжаю искать разные примеры использования модуля, но каждый продолжает ссылаться на точный образец с веб-сайта unicodecsv (или на некоторые аналогичные варианты).проблема с читателем unicodecsv в python
import unicodecsv as csv
from io import BytesIO
f = BytesIO()
w = csv.writer(f, encoding='utf-8')
_ = w.writerow((u'é', u'ñ'))
_ = f.seek(0)
r = csv.reader(f, encoding='utf-8')
next(r) == [u'é', u'ñ']
>>> True
Для меня этот пример делает слишком много предположений о нашем понимании. Это не похоже, что передается файл csv. Я полностью пропустил сюжет.
То, что я хочу сделать, это:
- Прочитайте первую строку файла CSV, которые являются заголовки
- Читать остальные строки и поместить их в словаре
Мой сломаны код :
import unicodecsv
#
i = 0
myCSV = "$_input.csv"
dic = {}
#
f = open(myCSV, "rb")
reader = unicodecsv.reader(f, delimiter=',')
strHeader = reader.next()
#
# read the first line of csv
# use custom function to parse the header
myHeader = FNC.PARSE_HEADER(strHeader)
#
# read the remaining lines
# put data into dictionary of class objects
for row in reader:
i += 1
dic[i] = cDATA(myHeader, row)
И, как и ожидалось, я получаю «UnicodeDecodeError». Может быть, на примере выше есть ответы, но они просто полностью перевернуты над моей головой.
Может кто-нибудь исправить мой код? У меня заканчиваются волосы, чтобы вырваться.
я переключился читателя строку:
reader = unicodecsv.reader(f, encoding='utf-8')
Traceback: для строки в считывающем: Файл "C: \ python27 \ unicodecsv \ py2.py", строка 128 в следующем для значения в строке ]
UnicodeDecodeError: 'utf8' кодек не может декодировать байт 0x90 в положении 48: invalide начать байт
Когда я строго печать данных с помощью:
f = open(myCSV, "rb")
reader = csv.reader(f, delimiter=',')
for row in reader:
print(str[row[9]] + '\n')
print(repr(row[9] + '\n')
>>> UTAS ? Offline
>>> 'UTAS ? Offline'
1) Вы показываете «писатель» затем «читателя». Нужен ли писатель?Или это только в том случае, если кто-то создает файл csv? В моем случае кто-то отправляет мне файл csv, и я обрабатываю информацию. Мой код работал нормально, пока один из полей не добавил символы Unicode. 2) Я попробовал добавить «endcoding = 'utf-8» на строку «reader», и он выбросил ошибку - что-то вроде строк не распознанной входной строки для этого параметра - я пишу это из памяти, m не на моей рабочей станции. – twegner
(1) Раздел записи предназначен только для примера. Код считывателя не зависит от того, как создается файл (хотя он принимает действительный файл csv, закодированный как utf-8. (2) Пожалуйста, отредактируйте свой вопрос с помощью вашего нового кода и полной трассировки, когда вы получите возможность. «unicode» в вашем файле также может оказаться полезным. – snakecharmerb
Возможно, ваши данные не кодируются как utf-8. На основе http://stackoverflow.com/questions/6180521/unicodedecodeerror-utf8-codec-cant-decode-bytes -in-position-3-6-invalid-dat, попробуйте изменить кодировку на «latin-1». Существуют кодировки ISO-8859-X для разных языков, которые вы могли бы попробовать увидеть https://en.wikipedia.org/ wiki/ISO/IEC_8859-1 – snakecharmerb