#python #файлы #кодировка #unicode
День добрый! Есть .txt файл который содержит строки вида: 8415778000|8415778099 Мне нужно записать все числа а промежутке от 1-го числа до 2-го. Я написал вот такой скрипт. f = open('pool.txt') for line in f.readlines(): a, b = line.split('|', 1) b = int(b.strip()) a = int(a.strip()) print (str(a)) while a <= b: a += 1 print(str(a)) Но при выполнении он выдает ошибку: > Traceback (most recent call last): File "*/1.py", line 5, ina = int(a.strip()) ValueError: invalid literal for int() with base 10: '\xef\xbb\xbf8415778000' Я не могу понять почему, помогите.
Ответы
Ответ 1
Примените параметр encoding='utf_8_sig' в функции open(): f = open('pool.txt', encoding='utf_8_sig') так как ваш файл кодирован в кодировке UTF-8 s BOM (BOM - Byte Order Mark), где первые 3 байты всегда те же самые (для обозначения вот этой кодировки). Примечание: Вместо f = open('pool.txt', encoding='utf_8_sig') for line in f.readlines(): a, b = line.split('|', 1) .... .... лучше писать with open('pool.txt', encoding='utf_8_sig') as some_name: for line in some_name: a, b = line.split('|', 1) .... .... т.к. после выхода из блока with будет файл автоматически закрыт (кроме других преимуществ).Ответ 2
\xef\xbb\xbf - это Маркер последовательности байтов Можно попробовать следующее: f = open("pool.txt") data = f.read().decode("utf-8-sig").encode("utf-8")
Комментариев нет:
Отправить комментарий