python中txt文件的编码转换问题utf-8转gbk

之前一直使用python内置的读写文件函数open,参数中不含encoding一项。

它实际上是,读入文件是什么编码,写出文件就是什么编码。

如今遇到一个问题,需要把一个utf8编码txt的部分内容另存,为了postprocess还要存成gbk编码。

解决一:codecs模块的读写函数codecs.open

# -*- coding: gbk -*-
#!usr/bin/env python
import sys
import codecs
 
with codecs.open(sys.argv[1], 'r', encoding='utf-8') as f, codecs.open(sys.argv[2], 'w',encoding='gbk') as wf:
    for line in f:
        lines = line.strip().split('\t')
        #newline = '{}\t{}\n'.format((lines[2]).encode('gbk'), (lines[3]).encode('gbk'))
        newline = lines[2]+'\t'.decode('gbk')+lines[3]+'\n'.decode('gbk')
        wf.write(newline)

读入时encoding指明文件编码(需已知),让程序用该方式decode读入txt,也就是说此时文件内容都是unicode对象字符了;

写出时encoding是目标保存编码方式,wf.write前要将组合字符串的编码统一。

只要注意将【读入字符】编码和【输入字符】编码统一,比如上面代码,lines[2]是unicode对象,'\t\n'是gbk编码,要么对前者encode,要么对后者decode。


解决二:直接对文件转码

其实不用在程序中纠结de-encode这么麻烦的问题,先直接存。

存好newtxt后,在shell使用iconv命令直接对文件转码:

[shenjiayu@cp01-shenjiayu: ~]$ iconv -f utf-8 -t gbk utf_file > gbk_file
不过如果在处理程序中出现了编码问题,那就还是要在de-encode上找办法了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值