Python split()在文件的第一行未按预期工作

Python split()在文件的第一行未按预期工作,python,file,Python,File,我有一个大的文本文件,里面有数据挖掘出来的观点,每个观点都分为积极的、消极的、中立的或混合的。每一行都以“+”、“-”、“=”或“*”开头,对应于这些分类器。此外,以“!!”开头的行表示要忽略的注释 下面是一个简单的Python脚本,它只需计算每个分类器的数量,并忽略注释行: classes = [0, 0, 0, 0] # "+", "-", "=", "*" f = open("All_Classified.txt") for i, line in enumerate(f): li

我有一个大的文本文件,里面有数据挖掘出来的观点,每个观点都分为积极的、消极的、中立的或混合的。每一行都以“+”、“-”、“=”或“*”开头,对应于这些分类器。此外,以“!!”开头的行表示要忽略的注释

下面是一个简单的Python脚本,它只需计算每个分类器的数量,并忽略注释行:

classes = [0, 0, 0, 0] # "+", "-", "=", "*"

f = open("All_Classified.txt")
for i, line in enumerate(f):
    line = line.strip()
    classifier = line.split(" ")[0]

    if classifier == "+": classes[0] += 1
    elif classifier == "-": classes[1] += 1
    elif classifier == "=": classes[2] += 1
    elif classifier == "*": classes[3] += 1
    elif classifier == "!!": continue
    else: print "Line "+str(i+1)+": \""+line+"\""
f.close()

print classes
下面是“All_Classified.txt”前5行的示例:

无论出于何种原因,我的输出在第一次迭代期间触发else语句,好像它不识别“!!”,我不知道为什么。我将此作为输出:

Line 1: "!! GROUP 1, 1001 - 1512"
[2986, 1034, 16278, 535]
此外,如果我从“All_Classified.txt”中删除第一行,那么它不会识别第一行的“=”。不确定要按预期识别第一行,必须执行哪些操作

编辑(再次):正如Peter所问,如果我替换
其他:用
其他:打印“Line”+str(I+1)+“:\”“+Line+”\
:打印“分类器”+分类器+“Line”+str(I+1)+“:\”“+Line+”

编辑:第一节使用
xxd All_Classified.txt

0000000: efbb bf21 2120 4752 4f55 5020 312c 2031  ...!! GROUP 1, 1
0000010: 3030 3120 2d20 3135 3132 0d0a 3d20 3130  001 - 1512..= 10
0000020: 3031 2f2f 4344 2054 4954 4c45 5449 544c  01//CD TITLETITL
0000030: 452f 2f4e 4e50 2048 6f77 2f2f 5752 4220  E//NNP How//WRB 

我怀疑你的输入文件不是它看起来的那样。例如,
分类器
可能包含一些打印时未显示的控制字符(但会影响比较):

编辑在这里您可以看到:

0000000: efbb bf21 2120
         ^^^^ ^^
它是成为
分类器的一部分的


尝试使用
“utf-8-sig”
作为编码打开文件(例如,请参见)。

您的代码似乎工作正常。也许文件中有一些奇怪的东西,你不能简单地通过
print
ing来检测。在任何情况下,
pdb
都是你的朋友。另外,您正在运行什么操作系统?也许您可以尝试将文件的换行符转换为操作系统的本机换行符。您确定“!!”之间有空格吗“分组”而不是,比如说,一张账单?你的代码适合我。你能在
中打印分类器吗?其他:打印…
并显示输出?是的,我肯定它是一个空格。我只是试着复制/粘贴我在这里发布的内容(代码和文本文件),并得到相同的输出(显然计数除外)@Peter,我用输出编辑了我的问题Hank you,永远不会想到这一点。导入编解码器后,我打开了(“All_Classified.txt”,“r”,“utf-8-sig”)
,它成功了
0000000: efbb bf21 2120 4752 4f55 5020 312c 2031  ...!! GROUP 1, 1
0000010: 3030 3120 2d20 3135 3132 0d0a 3d20 3130  001 - 1512..= 10
0000020: 3031 2f2f 4344 2054 4954 4c45 5449 544c  01//CD TITLETITL
0000030: 452f 2f4e 4e50 2048 6f77 2f2f 5752 4220  E//NNP How//WRB 
>>> classifier = '!\0!'
>>> print classifier
!!
>>> classifier == '!!'
False
0000000: efbb bf21 2120
         ^^^^ ^^