码迷,mamicode.com
首页 > 其他好文 > 详细

文件/文件夹下文件编码转换【转码】

时间:2021-07-01 17:19:46      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:for   dir   文件   类型   pen   目录名   遍历   sys   import   

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# @auther gaocan 809900210@qq.com

import sys
import os
import re
import codecs

‘‘‘
Codec: See Python`s Standard Encodings
‘‘‘
#   文件转码
def trans_file(filename, dc, ec):
    contents = ‘‘
    with codecs.open(filename, r, dc) as f:
        contents = f.read()

    with codecs.open(filename, w, ec) as f:
        f.write(contents)

#   文件夹下,指定文件类型的文件转码
def trans_folder(folder, dc, ec, filters):
    for root, dirs, files in os.walk(folder):
        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名list
        # files 表示该文件夹下的文件list

        # 遍历文件
        for f in files:
            filename = os.path.join(root, f)
            for filter in filters:
                if re.match(filter, filename, re.I):
                    trans_file(filename, dc, ec)
                    break

        # 遍历所有的文件夹
        for d in dirs:
            trans_folder(os.path.join(root, d), dc, ec, filters)

#   argv[1]:目标文件/文件夹
#   argv[2]:目标文件的原始编码
#   argv[3]:转换后的文件编码
#   argv[4:n]:如果指定的目标为文件夹,则需写出过滤选项,比如*.*、*.cpp、*.h,空格分隔每个过滤选项
def main():
    #   至少四个参数
    if len(sys.argv) < 4:
        return
    
    dst = sys.argv[1]
    dc = sys.argv[2]
    ec = sys.argv[3]

    if os.path.isdir(dst):  #   文件夹
        #   至少5个参数
        if len(sys.argv) < 5:
           return
        filters = sys.argv[4:len(sys.argv) - 1]
        trans_folder(dst, dc, ec, filters)
    elif os.path.isfile(dst):   #   文件
        trans_file(dst, dc, ec)
    else:
        return
    
if __name__ == __main__:
    main()

 

文件/文件夹下文件编码转换【转码】

标签:for   dir   文件   类型   pen   目录名   遍历   sys   import   

原文地址:https://www.cnblogs.com/Code-Killer/p/14958252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!