Сообщите нам, какая именно версия Python на какой платформе.
Показать полный трассировку, которую вы получаете, когда происходит ошибка.Посмотри на это сам.Какая последняя строка вашего кода появляется?Как вы думаете, что за строка bytes
декодируется?Почему используется кодек ascii
??
Обратите внимание, что автоматическое преобразование bytes
в str
с кодеком по умолчанию (например, ascii) НЕ выполняется Python 3.x.Так что либо вы делаете это явно, либо cx_freeze имеет значение.
Обновите после получения дополнительной информации в комментариях.
Excel не сохраняет файлы CSV в ASCII.Это сохраняет их в том, что MS называет «кодовой страницей ANSI», которая варьируется в зависимости от региона.Если вы не знаете, что у вас, вероятно, это cp1252
.Чтобы проверить, сделайте следующее:
>>> import locale; print(locale.getpreferredencoding())
cp1252
Если бы Excel сохранял файлы в ASCII, ваш байт '\xa0'
был бы заменен на '?'и вы не получите UnicodeDecodeError.
Сохранение ваших файлов в UTF-8
потребует от вас открытия файлов с помощью encoding='utf8'
и будет иметь ту же проблему (за исключением того, что вы получите ворчание о 0xc2вместо 0xa0).
Вам не нужно размещать все четыре ваших CSV-файла в Интернете.Просто запустите этот небольшой сценарий (без проверки):
import sys
for filename in sys.argv[1:]:
for lino, line in enumerate(open(filename), 1):
if '\xa0' in line:
print(ascii(filename), lino, ascii(line))
'\xa0'
- это NO-BREAK SPACE
или
... вы можете отредактировать свои файлы, чтобы изменить их на обычные пробелы.
Возможно, вам нужно будет спросить в списке рассылки cx_freeze, чтобы получить ответ, почему происходит эта ошибка.Они захотят узнать полный след.Поэкспериментируйте - покажите это здесь.
Кстати, «смещение 7338» довольно велико - вы ожидаете, что строки в вашем файле CSV будут такими длинными?Возможно, что-то читает все ваши файлы ...