Функция 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
. Что это такое и как я могу очистить свой список от них.
Спасибо.
Ответы
Ответ 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 без спецификации, сохраните файл и вы установите.