zoukankan      html  css  js  c++  java
  • Python读取UTF-8编码文件并使用命令行执行时输出结果的问题

    最近参加了由CCF举办的数据挖掘比赛,主办方提供了csv格式的数据文件,由于中文显示乱码的问题,我先用txt文本编辑器将编码改为utf-8格式,但是在读取文件并输出读取结果时发生了问题,代码如下:

     1 # -*- coding:utf-8 -*-
     2 __author__ = 'Jz'
     3 
     4 csvPath = 'D:/coding_file/python_file/Big Data/trainUTF8.csv'
     5 try:
     6     csv = open(csvPath, 'r')
     7     lines = csv.readlines()
     8     for line in lines:
     9         print line.decode('utf-8').encode('GBK')
    10 except IOError, ioe:
    11     if hasattr(e, 'reason'):
    12         print '文件打开失败,失败原因:' + e.reason

    运行结果如下:

    显然根据结果来看问题具体出现在print line.decode('utf-8').encode('GBK')这里,按理说应该是没有问题的,那么问题到底出现在哪里?

    后来搜索了很多相关资料,解决了问题,总结如下:Windows系统的txt文件在使用utf-8编码保存时会默认在文件开头插入三个不可见字符,称为BOM头,这个BOM头在python的codecs库中已经定义为常量。Windows根据BOM头来判断txt文件是否为utf-8编码,所以在读取文件时必须将BOM头去除或者忽略,否则python在decode和encode时会出现错误。

    解决方法:

     1 # -*- coding:utf-8 -*-
     2 __author__ = 'Jz'
     3 
     4 import codecs
     5 
     6 csvPath = 'D:/coding_file/python_file/Big Data/trainUTF8.csv'
     7 try:
     8     csv = open(csvPath, 'r')
     9     lines = csv.readlines()
    10     for line in lines:
    11         print line.decode('utf-8').encode('gbk', 'ignore')
    12 except IOError, ioe:
    13     if hasattr(e, 'reason'):
    14         print '文件打开失败,失败原因:' + e.reason

    ignore参数表示忽略其中有异常的编码,仅显示有效的编码

  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/jzincnblogs/p/5034734.html
Copyright © 2011-2022 走看看