使用如下語句讀取名為0_xx.txt 文件時,遇到錯誤 ValueError: embedded null character
if __name__ == '__main__': fr = open("F:\eclipse_workspace\machine_learning_example\Ch02\trainningDigits\0_38.txt") for i in range(32): lineStr = fr.readline() lineStr = lineStr.strip() print(lineStr) pass
1、通過測試,確定錯誤確實是文件讀取語句;
2、是否是文件中包含null字符呢?用ultraedit工具用16進制形式檢查數據文件,沒有發現有null字符;
3、是否是因為Windows中的編碼和python中的編碼形式不一樣造成的呢?查看到文件編碼為GBK格式,但python是可以正確讀取GBK文件的,試了其它GBK文件,讀取沒有任何問題;
4、是不是因為文件名太長?把數據文件放在當前文件夾下,嘗試讀取確實沒有問題。但真的是文件名太長的原因嗎?這時候我才發現文件名中有個 ‘\0’ ,才如夢初醒。
注意:一般情況下,Python解釋器會將遇到的‘\’識別為路徑,會自動增加一個'\'以便和轉義字符進行區分,但若遇到轉義字符則不增加‘\’。
例如:上述文件名將被轉換為 F:\\eclipse_workspace\\machine_learning_example\\Ch02\trainingDigits\0_38.txt。因而出錯。
文件路徑中若包含‘\0’、'\t' 等特殊轉義字符時要特別注意。
推薦文件路徑寫法:
F:/eclipse_workspace/machine_learning_example/Ch02/trainningDigits/0_38.txt ,斜杠反過來了,這樣就不會出現歧義了。 F:\\eclipse_workspace\\machine_learning_example\\Ch02\\trainningDigits\\0_38.txt
