zoukankan      html  css  js  c++  java
  • 一个批量转换文件编码的python脚本

    需要将工作目录下的文件进行转码,开始的编码是GBK的,需要将其转换为utf-8的。文件较多,手动转换肯定不行,用Python写个脚本来实现。找到一段代码参考:
    1. import os,sys  
    2.   
    3. def convert( filename, in_enc = "GBK", out_enc="UTF8" ):  
    4.     try:  
    5.         print "convert " + filename,  
    6.         content = open(filename).read()  
    7.         new_content = content.decode(in_enc).encode(out_enc)  
    8.         open(filename, 'w').write(new_content)  
    9.         print " done"  
    10.     except:  
    11.         print " error"  
    12.   
    13. def explore(dir):  
    14.     for root, dirs, files in os.walk(dir):  
    15.         for file in files:  
    16.             path = os.path.join(root, file)  
    17.             convert(path)  
    18.   
    19. def main():  
    20.     for path in sys.argv[1:]:  
    21.         if os.path.isfile(path):  
    22.             convert(path)  
    23.         elif os.path.isdir(path):  
    24.             explore(path)  
    25.   
    26. if __name__ == "__main__":  
    27.     main() 

    使用了string模块里的encode方法和decode方法,我用的是python 3.1版本,发现者两个方法已经不支持了。如果你是旧版本的Python可以直接使用,2.6是可以的。

    查阅了下3.1的文档,发现codecs能很好处理文件编码问题,使用它来正确的读出文件,然后将文件编码改为utf-8,写回去就好:
    代码实现如下:

    import os
    import sys
    import codecs
    #该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到utf-8
    def convert(file,in_enc="GBK",out_enc="UTF-8"):
    try:
    print ("convert " +file)
    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))


    def explore(dir):
    for root,dirs,files in os.walk(dir):
    for file in files:
    path=os.path.join(root,file)
    convert(path)

    def main():
    for path in sys.argv[1:]:
    if(os.path.isfile(path)):
    convert(path)
    elif os.path.isdir(path):
    explore(path)

    if __name__=="__main__":
    main()       
  • 相关阅读:
    【STM32 .NET MF开发板学习29】摄像头蓝牙图像远程获取
    【.Net MF网络开发板研究04】Socket编程之服务端
    【.Net MF网络开发板研究01】IP地址设定及简单web演示
    【.Net MF网络开发板研究02】Http Server功能演示
    用VB.net开发.NET Micro Framework
    【.Net MF网络开发板研究03】获取雅虎天气(HttpClient示例)
    js中URL编码参数(UrlEncode,UrlDecode)[ansi编码] PHP好使 简单
    PHP通过SMTP实现发送邮件_包括附件 简单
    mysql case then使用 简单
    PHP中$_SERVER的详细参数与说明 简单
  • 原文地址:https://www.cnblogs.com/macula7/p/1960395.html
Copyright © 2011-2022 走看看