原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:http://blog.csdn.net/humanking7/article/details/78501474
需求
有时候想要把代码放到平板或是手机上观看,但是相应的阅读软件支持编码为UTF-8格式的文件,类似GBK等编码格式里的汉字都会呈现乱码状态。手动用Notepad++转换很方便,但是批量处理就很尴尬了,由此引出本篇blog
需要的库
chardet、codecs
简介
在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。
在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。
安装
codecs模块直接导入就可以了
import codecs
安装chardet模块
pip install chardet
安装成功:
导入
import chardet
代码
主程序:
import os
import sys
import codecs
import chardet
from subFunc_tools import *
#将路径下面的所有文件,从原来的格式变为UTF-8的格式
if __name__ == "__main__":
path = r'D:\Code_Sources\Python_PyCharm\convert_GBK_UTF-8\test_txt'
(list_folders, list_files) = list_folders_files(path)
print("Path: " + path)
for fileName in list_files:
filePath = path + '\\' + fileName
with open(filePath, "rb") as f:
data = f.read()
codeType = chardet.detect(data)['encoding']
convert(filePath, codeType, 'UTF-8')
转换代码
import os
import sys
import codecs
import chardet
from subFunc_tools import *
def convert(file, in_enc="GBK", out_enc="UTF-8"):
"""
该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到utf-8
:param file: 文件路径
:param in_enc: 输入文件格式
:param out_enc: 输出文件格式
:return:
"""
in_enc = in_enc.upper()
out_enc = out_enc.upper()
try:
print("convert [ " + file.split('\\')[-1] + " ].....From " + in_enc + " --> " + out_enc )
f = codecs.open(file, 'r', in_enc)
new_content = f.read()
codecs.open(file, 'w', out_enc).write(new_content)
# print (f.read())
except IOError as err:
print("I/O error: {0}".format(err))
获取指定文件夹内的所有文件名
import os
def list_folders_files(path):
"""
返回 "文件夹" 和 "文件" 名字
:param path: "文件夹"和"文件"所在的路径
:return: (list_folders, list_files)
:list_folders: 文件夹
:list_files: 文件
"""
list_folders = []
list_files = []
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
list_folders.append(file)
else:
list_files.append(file)
return (list_folders, list_files)