拆分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.open
或codecs.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,保存文件,你设置。