拆分function添加:\ 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 。 这些是什么,如何从他们清理我的名单。

谢谢。

您的文件一开始就包含UTF-8 BOM 。

要摆脱它,首先解码您的文件内容到Unicode。

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

但是最好不要将它编码回utf-8 ,而是使用unicode d文本。 有一个很好的规则:尽可能快地解码所有input的文本数据到unicode,并且只使用unicode; 并尽可能晚地将输出数据编码为所需的编码。 这会让你免受许多麻烦。

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

也检查这一点 。

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

\xef\xbb\xbf是UTF-8的字节顺序标记 – \x 是一个转义序列,指示接下来的两个字符是代表字符代码的hex序列。

\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 

正如其他人提到的,你正在处理一个包含UTF-8 BOM的文件。

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

但是,如果您碰巧必须只使用一个静态文件(或静态文件的一小部分),则您可能希望主动删除BOM,以便您不必处理它。

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

记住第一个(但有很多)是Notepad ++。 只需进入编码>转换为UTF-8没有BOM,保存文件,你设置。