Подтвердить что ты не робот

Функция Split add:\xef\xbb\xbf...\n в мой список

Я хочу открыть мой file.txt и разделить все данные из этого файла.

Вот мой file.txt:

some_data1 some_data2 some_data3 some_data4 some_data5

и вот мой код на Python:

>>>file_txt = open("file.txt", 'r')
>>>data = file_txt.read()
>>>data_list = data.split(' ')
>>>print data
some_data1 some_data2 some_data3 some_data4 some_data5
>>>print data_list
['\xef\xbb\xbfsome_data1', 'some_data1', "some_data1", 'some_data1', 'some_data1\n']

Как вы можете видеть здесь, когда я печатаю свой data_list, он добавляет в мой список: \xef\xbb\xbf и это: \n. Что это такое и как я могу очистить свой список от них.

Спасибо.

4b9b3361

Ответ 1

Вначале ваш файл содержит спецификацию UTF-8.

Чтобы избавиться от него, сначала расшифруйте содержимое вашего файла в unicode.

fp = open("file.txt")
data = fp.read().decode("utf-8-sig").encode("utf-8")

Но лучше не перекодировать его обратно на utf-8, но работать с текстом unicode d. Существует хорошее правило: как можно скорее декодировать все ваши текстовые данные в unicode и работать только с unicode; и кодировать выходные данные в требуемую кодировку как можно позже. Это избавит вас от многих головных болей.

Чтобы прочитать файлы большего размера в определенной кодировке, используйте io.open или codecs.open.

Также проверьте этот.

Используйте str.strip() или str.rstrip(), чтобы избавиться от символа новой строки \n.

Ответ 2

\xef\xbb\xbf - "Байт" для UTF-8 - \x - это escape-последовательность, указывающая, что следующие два символа являются шестнадцатеричной последовательностью, представляющей код символа.

\n - это новый символ строки. Чтобы удалить это, вы можете использовать rstrip().

data.rstrip()
data_list = data.split(' ')

Чтобы удалить отметку порядка байтов, вы можете использовать io.open (при условии, что вы используете 2.6 или 2.7), чтобы открыть файл в utf-8. Обратите внимание, что это может быть немного медленнее, поскольку оно реализовано на Python - если необходима скорость или более старые версии Python, посмотрите codecs.open.

Попробуйте что-то вроде этого:

import io

# Make sure we don't lose the list when we close the file
data_list = []

# Use `with` to ensure the file gets cleaned up properly
with io.open('file.txt', 'r', encoding='utf-8') as file:
    data = file.read() # Be careful when using read() with big files
    data.rstrip() # Chomp the newline character
    data_list = data.split(' ')

print data_list

Ответ 3

Как упоминалось выше, вы имеете дело с файлом, который содержит спецификацию UTF-8 в начале.

Все они расскажут вам, как с этим бороться или удалять его напрямую.

НО, если вам приходится работать только с одним статическим файлом (или с небольшим статическим набором из них), вы можете полностью удалить эту спецификацию, чтобы просто вам не приходилось иметь дело с ней.

На самом деле большинство текстовых редакторов позволят вам конвертировать из одной кодировки в другую, а иногда UTF-8 и UTF-8 с спецификацией перечислены отдельно.

Первое, что приходит мне на ум (но его много) - Notepad ++. Просто зайдите в Encoding > Convert to UTF-8 без спецификации, сохраните файл и вы установите.