1. 程式人生 > 其它 >檔案/資料夾下檔案編碼轉換【轉碼】

檔案/資料夾下檔案編碼轉換【轉碼】

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

# @auther gaocan [email protected]

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()