pythonによる一括変換ファイル符号化フォーマットの実装
2699 ワード
最近redisのソースコードを勉强して、ネット上から1部の神の注釈の良いコードをダウンロードして、しかしファイルのコードのフォーマットはutf-8の使用sourcesightが开いて文字化けして、sourceinsightはutf-8のフォーマットを支持しないで、ネット上で探して、プラグインをインストールして解决する必要があると言って、今日の主な目的はsourceinsightを整えるのではありませんて、主に最近pythonを学んで、手を练习したいです
python初心者なので、主に使うモジュールや関数を記録して印象を深めます
使用モジュール:os,sys,codec,chardet
関数の使用
sys.argv:コマンドラインパラメータを取得するために使用するsys.Argv[0]コード自体のパスを識別する
os.path:操作経路の共通関数を実現
os.path.isfile:ファイルかどうかを判断する
os.path.isdir:ディレクトリかどうかを判断する
os.walk:ディレクトリツリーを巡り、3元グループ(root,dirs,files)を返します.
rootとは、現在遍歴しているこのフォルダの自身のアドレスを指します.
dirsはリストで、そのフォルダ内のすべてのディレクトリの名前(サブディレクトリを含まない)です.
filesは同じlistで、コンテンツはフォルダ内のすべてのファイル(サブディレクトリを含まない)です.
この関数は少し理解しにくい感じがして、1つの大神の文章を発見して、書いたのは特に詳しくて、リンクを貼ります:
http://www.cnblogs.com/herbert/archive/2013/01/07/2848892.html
os.path.join:複数のパスをマージして戻ります
codecs.Open:ファイルを開くときにファイルをUnicode符号化に変換し、文字化けし、ファイルハンドルに戻る
ファイルハンドルread:ファイル内容を読み出し、ファイル内容を戻り値から返す
ファイルハンドルwrite:ファイルを書く
chardet.detect:ファイルの符号化フォーマットを識別し、辞書を返します.
confidence:返される符号化フォーマットの可能性
encoding:エンコーディングフォーマット
OK、コードを貼る
python初心者なので、主に使うモジュールや関数を記録して印象を深めます
使用モジュール:os,sys,codec,chardet
関数の使用
sys.argv:コマンドラインパラメータを取得するために使用するsys.Argv[0]コード自体のパスを識別する
os.path:操作経路の共通関数を実現
os.path.isfile:ファイルかどうかを判断する
os.path.isdir:ディレクトリかどうかを判断する
os.walk:ディレクトリツリーを巡り、3元グループ(root,dirs,files)を返します.
rootとは、現在遍歴しているこのフォルダの自身のアドレスを指します.
dirsはリストで、そのフォルダ内のすべてのディレクトリの名前(サブディレクトリを含まない)です.
filesは同じlistで、コンテンツはフォルダ内のすべてのファイル(サブディレクトリを含まない)です.
この関数は少し理解しにくい感じがして、1つの大神の文章を発見して、書いたのは特に詳しくて、リンクを貼ります:
http://www.cnblogs.com/herbert/archive/2013/01/07/2848892.html
os.path.join:複数のパスをマージして戻ります
codecs.Open:ファイルを開くときにファイルをUnicode符号化に変換し、文字化けし、ファイルハンドルに戻る
ファイルハンドルread:ファイル内容を読み出し、ファイル内容を戻り値から返す
ファイルハンドルwrite:ファイルを書く
chardet.detect:ファイルの符号化フォーマットを識別し、辞書を返します.
confidence:返される符号化フォーマットの可能性
encoding:エンコーディングフォーマット
OK、コードを貼る
# -*- coding: utf-8 -*-
'''
This file is order to covert file code format batch process
'''
import os
import sys
import codecs
import chardet
def GetFileExtension(file):
(filepath, filename) = os.path.split(file)
(shortname, extension) = os.path.splitext(filename)
return extension
def GetFileEncodingFormat(file):
fileHandle = open(file, 'r', errors = 'ignore')
fileContext = fileHandle.read()
return chardet.detect(fileContext.encode())["encoding"]
def CovertFileCodeFormat(file, out_encode):
try:
encoding = GetFileEncodingFormat(file)
extension = GetFileExtension(file)
if (encoding != out_encode and (extension == '.c' or extension == '.h')):
fileHandle = codecs.open(file, 'r', encoding, errors = 'ignore')
fileContext = fileHandle.read()
codecs.open(file, 'w', out_encode, errors = 'ignore').write(fileContext)
print ("convert:" + file + " sucess")
except IOError as err:
print ("I/O error: {0}".format(err))
def ProcessDir(dir):
for root, dirs, files in os.walk(dir):
for file in files:
filePath = os.path.join(root, file)
CovertFileCodeFormat(filePath, sys.argv[2])
def main():
path = sys.argv[1]
if (os.path.isfile(path)):
CovertFileCodeFormat(path, sys.argv[2])
elif (os.path.isdir(path)):
ProcessDir(path)
if __name__ == '__main__':
main()