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

 # -*- coding:utf-8 -*-
__author__ = 'Jz' csvPath = 'D:/coding_file/python_file/Big Data/trainUTF8.csv'
try:
csv = open(csvPath, 'r')
lines = csv.readlines()
for line in lines:
print line.decode('utf-8').encode('GBK')
except IOError, ioe:
if hasattr(e, 'reason'):
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时会出现错误。

解决方法:

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

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

Python读取UTF-8编码文件并使用命令行执行时输出结果的问题的更多相关文章

  1. Python Linux 命令行执行脚本输出重定向print到日志文件

    reference: https://unix.stackexchange.com/questions/182537/write-python-stdout-to-file-immediately   ...

  2. python读取txt批量创建文件

    python读取txt批量创建文件 pythonbatchfile 前几天有个小问题, 需要批量建立很多文件夹,, 所以手动写了个小的脚本, 后续可以直接使用 读取目录文件, 然后直接创建相应的文件 ...

  3. Python命令行执行.py文件提示ModuleNotFoundError:No module named 'XXX'解决办法

    原因:在命令行执行.py文件找不到包是因为我们没有把项目路径保存,可以通过sys.path.append()保存项目路径,执行后就能成功. ############################## ...

  4. MAC与windows下打开当前文件路径的命令行(终端)

    MAC 下文件夹与终端: 1.打开当前路径的终端窗口方法: ①直接拖动要打开的文件夹到终端 ②打开finder的服务偏好设置, 勾选"新建位于文件夹位置的终端"选项, 以后可以在文 ...

  5. mysql命令行执行外部文件

    mysql命令行执行外部文件

  6. 在Linux命令行执行python命令

    在Linux的命令行执行python的某些命令: [root@centos7 ~]# echo "import sys ;print(sys.path)"|python3.6 [' ...

  7. 编码用命令行执行的C语言词语统计程序

    需求介绍 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c   ...

  8. 用deamon打开ISO文件,提示命令行错误!!

    用deamon打开ISO文件,提示命令行错误!! 解决方法:(没有关联iso文件)重新卸载deamon,再重新安装,在关联iso文件处打对勾,安装完成后即可用

  9. python读取并写入mat文件

    用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); save matData.mat 用python3读取并写入 ...

随机推荐

  1. 照着官网来安装openstack pike之安装dashboard

    上文提到了利用命令行下使用openstack的命令来创建虚拟机,这里选择安装dashboard来安装基于web界面的openstack平台 利用dashboard界面来创建虚拟机 dashboard这 ...

  2. 20145328 《Java程序设计》实验五实验报告

    20145328 <Java程序设计>实验五实验报告 实验名称 Java网络编程 实验内容 用书上的TCP代码,实现服务器与客户端. 客户端与服务器连接 客户端中输入明文,利用DES算法加 ...

  3. Sql Server数据库链接字符串参数说明

               DataSource,//要连接到的 SQL Server 实例的名称或网络地址              FailoverPartner,//在主服务器停机时要连接到的伙伴服务 ...

  4. asp.net core 发布 不打包cshtml 文件

    需要在 FolderProfile.pubxml 文件中添加 FolderProfile.pubxml <MvcRazorCompileOnPublish>false</MvcRaz ...

  5. PyTorch源码解读之torchvision.models(转)

    原文地址:https://blog.csdn.net/u014380165/article/details/79119664 PyTorch框架中有一个非常重要且好用的包:torchvision,该包 ...

  6. html-常用块级及行级标签

    1.常见块级标签   <h1></h1>......<h6></h6>:标题标签 h标签:标题标签,自动加粗,h1最大,h6最小 例:(前后隔一行)   ...

  7. JavaScript高级程序设计-读书笔记(3)

    第8章 BOM 1.window对象 (1)全局作用域 BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象既是通过JavaScript访问浏览器窗口的一个接口,又是E ...

  8. SQL Server 的索引结构实例

    目前SQL Server 的索引结构如下: 这个是聚集索引的存放形式: 非聚集索引的方式如下: 它们是以B+树的数据结构存放的. 相信大家都看过类似的图,但是没有直观的认识,下面举一个实际的例子来说明 ...

  9. JS代码大全(都是网上看到自己整理的)

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  10. Linux虚拟机忘记root密码的拯救办法

    于是百度之,还是有很多解决方案的.其原理就是,进入到single单用户模式下,去修改root密码: 1.重启系统,选择Linux引导,然后按住e,出现如下界面: 按下e 出现如下页面 选择kernel ...