python讀檔案時的編碼問題(BOM)

2021-07-23 18:27:48 字數 1203 閱讀 3539

python**:

# -*- coding: utf-8 -*-

import codecs

#f1 = codecs.open("d:\\python_code\\bayes\\data\\label.txt", 'r', 'utf-8')

f1 = open("d:\\python_code\\bayes\\data\\label.txt")

list1 = ['味道', '物流', '外觀', '包裝', '價效比', '品質', '功效', '**', '贈品', '服務']

list2 =

for line in f1:

line = line.strip()

print list1

print list2

for l1 in list1:

#l1 = l1.decode("utf-8")

print l1,

if l1 in list2:

print true

else:

print false

label.txt:

味道物流

外觀包裝

價效比品質

功效**

贈品服務

執行結果:

list1: ['\xe5\x91\xb3\xe9\x81\x93', '\xe7\x89\xa9\xe6\xb5\x81', '\xe5\xa4\x96\xe8\xa7\x82', '\xe5\x8c\x85\xe8\xa3\x85' , .......]

list2: ['\xef\xbb\xbf\xe5\x91\xb3\xe9\x81\x93', '\xe7\x89\xa9\xe6\xb5\x81', '\xe5\xa4\x96\xe8\xa7\x82', '\xe5\x8c\x85\xe8\xa3\x85' ,..........]

結果分析:對比兩個list,list2中的第乙個元素的unicode編碼多了'\xef\xbb\xbf'三個位元組的字串,這樣的話我們在使用帶這種標記的資料是可能會出現錯誤,

出現這種錯誤的原因是因為在.txt的檔案時,txt檔案會在該檔案的第一行加入這三個位元組作為開始的標記符,這種標記叫bom,當然我們在儲存的時候

可以把檔案儲存為無bom的檔案格式,這種錯誤通常都很隱蔽,需要注意!

matlab 讀arff檔案時的問題

在matlab中用arffread函式讀檔案時,遇到如下問題,data的第一列是字串,最後一列是問號,也就是非數字,而arffread函式會呼叫csvread csvread唯讀數字 csvread繼而呼叫dlmread。因此就會報出檔案和格式字元向量不匹配的錯誤。解決方法是 step1.在arff...

日誌分析中檔案編碼問題以及讀檔案匹配問題總結

一 檔案編碼問題 日誌格式可以為utf 8無bom格式 或者 ansi格式編碼。因為utf 8格式編碼會導致出現一些奇怪的問題,比如,第一行的log或待匹配的關鍵字 查詢不到。原因是 utf 8編碼的檔案中,bom佔三個位元組 如果用記事本把乙個文字檔案另存為utf 8編碼方式的話,用ue開啟這個檔...

日誌分析中檔案編碼問題以及讀檔案匹配問題總結

一 檔案編碼問題 日誌格式可以為utf 8無bom格式 或者 ansi格式編碼。因為utf 8格式編碼會導致出現一些奇怪的問題,比如,第一行的log或待匹配的關鍵字 查詢不到。原因是 utf 8編碼的檔案中,bom佔三個位元組 如果用記事本把乙個文字檔案另存為utf 8編碼方式的話,用ue開啟這個檔...