Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Разделение строки по разделителю и преобразование в числа

#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")

Комментариев нет:

Отправить комментарий