美文网首页
2019-02-12 python3 实现文件转码为utf-8

2019-02-12 python3 实现文件转码为utf-8

作者: gun21d | 来源:发表于2019-02-12 16:58 被阅读0次

    #!/usr/bin/python

    import sys

    import os

    import signal

    import shutil

    sys.path = ["../"] + sys.path

    import chardet

    import traceback

    ###################################################

    #main函数

    def ReadLines(fileName):

        fd =  open(fileName, "rb")#要有"rb",如果没有这个的话,默认使用gbk读文件。         

        buf = fd.read()

        fd.close() 

        result = chardet.detect(buf) 

        str=result["encoding"]

        fd = open(fileName,"r",encoding=result["encoding"]) 

        lines = fd.readlines()

        fd.close()

        return lines

    def ConvertFile(strFileName, strEncoding, bBak):

        fd =  open(strFileName, "rb")#要有"rb",如果没有这个的话,默认使用gbk读文件。         

        buf = fd.read()

        fd.close() 

        result = chardet.detect(buf) 

        str=result["encoding"]

        print ("文件编码:", str)

        tarEncoding = "utf-8"

        if str != tarEncoding:

            # 读文件

            fd = open(strFileName,"r",encoding=result["encoding"]) 

            lines = fd.readlines()

            fd.close()

            #备份文件

            if bBak != 0:

                strBakupFile = strFileName + ".bak"

                shutil.move(strFileName,strBakupFile)

            # 写文件

            fw = open(strFileName, "w", encoding=tarEncoding)

            for line in lines:

                print (line, end="", file=fw)

            fw.close()

            print ("文件转换结束:", strFileName)

        else:

            print ("文件不需要转换:", strFileName)

    def main():

        try:

            bBak = 1

            if len(sys.argv) > 2 and sys.argv[2] == "nobak":

                bBak = 0

            if len(sys.argv) > 1:

                p1 = sys.argv[1]

                # 目录

                if os.path.isdir(p1):

                    for item in os.listdir(p1):

                        file = os.path.join(p1,  item)

                        if os.path.isdir(file): # 目录

                            pass

                        else:

                            ConvertFile(file, "utf-8", bBak)

                # 文件

                else:

                    ConvertFile(sys.argv[1], "utf-8", bBak)

            else:

                print ("toUTF8 fileName/pathName <bak>")

        except:

            traceback.print_exc()

        sys.exit(0)

    #####################################################

    def signal_handler(signal, frame):

        print('You pressed Ctrl+C!')

        sys.exit(0)

    signal.signal(signal.SIGINT, signal_handler)

    #进入main函数

    main()

    相关文章

      网友评论

          本文标题:2019-02-12 python3 实现文件转码为utf-8

          本文链接:https://www.haomeiwen.com/subject/xfmkeqtx.html