Python读取UTF-8编码文件并使用命令行执行时输出结果的问题
最近参加了由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编码文件并使用命令行执行时输出结果的问题的更多相关文章
- Python Linux 命令行执行脚本输出重定向print到日志文件
reference: https://unix.stackexchange.com/questions/182537/write-python-stdout-to-file-immediately ...
- python读取txt批量创建文件
python读取txt批量创建文件 pythonbatchfile 前几天有个小问题, 需要批量建立很多文件夹,, 所以手动写了个小的脚本, 后续可以直接使用 读取目录文件, 然后直接创建相应的文件 ...
- Python命令行执行.py文件提示ModuleNotFoundError:No module named 'XXX'解决办法
原因:在命令行执行.py文件找不到包是因为我们没有把项目路径保存,可以通过sys.path.append()保存项目路径,执行后就能成功. ############################## ...
- MAC与windows下打开当前文件路径的命令行(终端)
MAC 下文件夹与终端: 1.打开当前路径的终端窗口方法: ①直接拖动要打开的文件夹到终端 ②打开finder的服务偏好设置, 勾选"新建位于文件夹位置的终端"选项, 以后可以在文 ...
- mysql命令行执行外部文件
mysql命令行执行外部文件
- 在Linux命令行执行python命令
在Linux的命令行执行python的某些命令: [root@centos7 ~]# echo "import sys ;print(sys.path)"|python3.6 [' ...
- 编码用命令行执行的C语言词语统计程序
需求介绍 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c ...
- 用deamon打开ISO文件,提示命令行错误!!
用deamon打开ISO文件,提示命令行错误!! 解决方法:(没有关联iso文件)重新卸载deamon,再重新安装,在关联iso文件处打对勾,安装完成后即可用
- python读取并写入mat文件
用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); save matData.mat 用python3读取并写入 ...
随机推荐
- 20145103 《Java程序设计》第7周学习总结
20145103<Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1 认识时间与日期 就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间字 ...
- TCP协议三次握手过程分析(改)
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- uboot向linux传递输出任何log信息的方法
答案:在bootargs中加入loglevel=8即可(在进入linux的过程中会输出任何log信息)
- RDB
在运行情况下, Redis 以数据结构的形式将数据维持在内存中, 为了让这些数据在 Redis 重启之后仍然可用, Redis 分别提供了 RDB 和 AOF 两种持久化模式. 在 Redis 运行时 ...
- websocket 重连解决方案
1.websocket 重连的脚本:https://github.com/joewalnes/reconnecting-websocket reconnecting-w ...
- Java实习一
简单的二元一次方程求解 import java.lang.Math; import java.util.Scanner; public class Solve{ public static void ...
- rownum和order by的执行顺序问题
SQL中rownum和order by的执行顺序的问题 : 在一个SQL中,如果同时使用rownum和order by,会有一个先后顺序的问题. 比如select id1,id2 from t_tab ...
- Visual Studio 2010 C++ 属性设置基础
在 <Visual Studio 2010 C++ 工程文件解读>中提到了C++工程中可以进行用户自定义的属性设置,如何进行属性设置呢? 下面我们来了解一下 props 文件的基本规则: ...
- 检签 sub sup应用
<html> <body> <b>This text is bold</b> <br /> <strong>This text ...
- 关于MAC升级后,vim更新插件报错
找不到路径: 直接在终端 terminal 输入: xcode-select --install