У меня есть два отчета о частоте японских слов, которые были составлены из разных источников. Каждая строка содержит слово и количество его вхождений, разделенных символами табуляции. У меня также есть скрипт Python, который должен разбить каждую строку на эти два значения, используя .split("\t")
. Последнее значение затем преобразуется в целое число, откуда и возникает ошибка:
ValueError: invalid literal for int() with base 10: '\ufeff29785713'
Это происходит только для данных из второго файла.
После тестирования, чтобы увидеть, будет ли работать преобразование числа в число с плавающей запятой (или изменить ошибку), результат был таким:
ValueError: could not convert string to float: '\ufeff29785713'
Является ли это результатом того, что табуляция или цифры во втором файле, возможно, технически не являются одним и тем же символом и не разграничивают должным образом, вызывая нежелательные символы в последнем значении (или, возможно, вообще не разделяя)? Оба файла имеют кодировку UTF-8.
Укороченная версия первого файла (работает)
split
.split
работает отлично, но после разделения на\t
в начале строки, которую вы пытаетесь преобразовать в int, появляется дополнительный"\uffef"
. Символ ЮникодаU+FEFF
— это знак порядка байтов, который используется для обозначения разницы между кодировкой с прямым порядком байтов и кодировкой с прямым порядком байтов. - person Pranav Hosangadi   schedule 13.08.2020.replace(u'\ufeff','')
. - person Randall Ivan Carson   schedule 13.08.2020