拆分功能将:\ xef\xbb\xbf ... \n添加到我的列表中

Mic*_*ael 49 python split

我想打开我的file.txt并拆分此文件中的所有数据.

这是我的file.txt:

some_data1 some_data2 some_data3 some_data4 some_data5
Run Code Online (Sandbox Code Playgroud)

这是我的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']
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的那样,当我打印data_list出来时,它会添加到我的列表中:\xef\xbb\xbf这个:\n.这些是什么以及如何从列表中清除我的列表.

谢谢.

war*_*iuc 72

您的文件在开头包含UTF-8 BOM.

要摆脱它,首先将文件内容解码为unicode.

fp = open("file.txt")
data = fp.read().decode("utf-8-sig").encode("utf-8")
Run Code Online (Sandbox Code Playgroud)

但最好不要将其编码回来utf-8,而是使用unicoded文本.有一个很好的规则:尽快将所有输入文本数据解码为unicode,并且只能使用unicode; 并尽可能晚地将输出数据编码为所需的编码.这将使您免于许多麻烦.

要以特定编码读取更大的文件,请使用io.opencodecs.open.

还检查一下.

使用str.strip()str.rstrip()删除换行符\n.

  • 或者使用[`io.open`](http://docs.python.org/2/library/io.html#io.open)以utf-8模式打开文件. (2认同)

the*_*ner 10

\xef\xbb\xbf是UTF-8 的字节顺序标记 - \x 是一个转义序列,表示接下来的两个字符是表示字符代码的十六进制序列.

\n是一个新的线条角色.要删除它,您可以使用rstrip().

data.rstrip()
data_list = data.split(' ')
Run Code Online (Sandbox Code Playgroud)

要删除字节顺序标记,您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 我必须使用 `encoding='utf-8-sig'` 才能使其正常工作 (2认同)

Jer*_*meJ 7

正如其他人提到的那样,您正在处理一个包含UTF-8 BOM的文件.

他们都告诉你如何处理它或直接删除它.

但是,如果您确实只需要使用一个静态文件(或一小组静态文件),您可能希望主动删除BOM,这样您就不必处理它.

事实上,大多数文本编辑器允许您从一种编码转换为另一种编码,有时会单独列出带有BOM的UTF-8和UTF-8.

我想到的第一个(但有很多)是Notepad ++.只需进入编码>转换为UTF-8而无需BOM,保存文件即可进行设置.