诡异错误一: ValueError: embedded null character

使用如下语句读取名为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
posted @ 2017-08-16 11:04  quintin  阅读(15265)  评论(1编辑  收藏  举报