我想打开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
。这些是什么以及如何从列表中清除我的列表。
感谢。
答案 0 :(得分:68)
您的文件开头包含UTF-8 BOM。
要摆脱它,首先将文件内容解码为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
。
同时检查this。
使用str.strip()
或str.rstrip()
删除换行符\n
。
答案 1 :(得分:9)
\xef\xbb\xbf
是UTF-8的Byte Order Mark - \x
is an escape sequence,表示接下来的两个字符是表示字符代码的十六进制序列。
\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
答案 2 :(得分:7)
正如其他人提到的那样,您正在处理一个包含UTF-8 BOM的文件。
他们都告诉你如何处理或直接删除它。
但是,如果您确实只需要使用一个静态文件(或一小组静态文件),您可能希望主动删除BOM,这样您就不必处理它。 / p>
事实上,大多数文本编辑器都允许您从一种编码转换为另一种编码,有时会单独列出带有BOM的UTF-8和UTF-8。
我想到的第一个(但有很多)是Notepad ++。只需进入编码>转换为没有BOM的UTF-8,保存文件并设置。