簡體   English   中英

Python split()在文件中的第一行沒有按預期工作

[英]Python split() not working as expected for first line in file

我有一個大型文本文件的數據挖掘意見,每個分類為正面,負面,中立或混合。 每行以“+”,“ - ”,“=”或“*”開頭,它們對應於這些分類器。 此外,以“!!”開頭的行表示要忽略的注釋。

下面是一個簡單的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行的示例:

!! GROUP 1, 1001 - 1512
= 1001//CD TITLETITLE//NNP How//WRB many//JJ conditioners/conditioner/NNS do//VBP you//PRP have//VBP ?//. 
= 1002//CD I//PRP have//VBP two//CD different//JJ kinds/kind/NNS ,//, Garnier//NNP Fructis//NNP Triple//NNP Nutrition//NNP conditioner//NN ,//, and//CC Suave//NNP coconut//NN .//. 
= 1003//CD But//CC I//PRP think//VBP I//PRP have//VBP about//IN 8//CD bottles/bottle/NNS of//IN the//DT Suave//NNP coconut//NN My//PRP$ mom//NN gave/give/VBD me//PRP a//DT bunch//NN for//IN Christmas//NNP because//IN she//PRP was/be/VBD getting/get/VBG tired/tire/VBN of//IN me//PRP saying/say/VBG I//PRP was/be/VBD out//IN 
= 1004//CD TITLETITLE//NNP Need//VB a//DT gel//NN that//IN works/work/NNS ,//, 8//CD mo//NN ,//, post//NN ,//, ready//JJ to//TO relax//VB edges/edge/NNS ,//, HELP//NNP ,//, 

無論出於何種原因,我的輸出在第一次迭代期間觸發else語句,好像它不能識別“!!”,我不知道為什么。 我得到這個作為輸出:

Line 1: "!! GROUP 1, 1001 - 1512"
[2986, 1034, 16278, 535]

另外,如果我從“All_Classified.txt”刪除第一行,那么它不會識別第一行的“=”。 不確定要按預期識別第一行需要做什么。

編輯(再次) :正如彼得問的那樣,如果我替換else: print "Line "+str(i+1)+": \\""+line+"\\"" ,這里是輸出else: print "Line "+str(i+1)+": \\""+line+"\\"" with else: print "Classifier "+classifier+ " Line "+str(i+1)+": \\""+line+"\\""

Classifier !! Line 1: "!! GROUP 1, 1001 - 1512"
[2986, 1034, 16278, 535]

編輯 :第一部分使用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 

我懷疑你的輸入文件不是它看起來的樣子。 例如, classifier可能包含一些在打印時未顯示的控制字符(但會影響比較):

>>> classifier = '!\0!'
>>> print classifier
!!
>>> classifier == '!!'
False

編輯你有它:

0000000: efbb bf21 2120
         ^^^^ ^^

這是UTF-8 BOM ,它成為classifier一部分。

嘗試使用codecs.open()打開文件,並使用"utf-8-sig"作為編碼(例如,參見https://stackoverflow.com/a/13156715/367273 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM