#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, in
a = 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")
Комментариев нет:
Отправить комментарий