Skip to content

Instantly share code, notes, and snippets.

@philomuzzi
Last active August 29, 2015 14:13
Show Gist options
  • Save philomuzzi/f99e6eabc01979cb67c9 to your computer and use it in GitHub Desktop.
Save philomuzzi/f99e6eabc01979cb67c9 to your computer and use it in GitHub Desktop.
file codec converter
#-*- coding: utf-8 -*-
#pip install chardet
import codecs
import os
import shutil
import re
import chardet
ext = [".h", ".cpp", ".txt", ".ini", ".inl"]
bakext= [".h.bak", ".cpp.bak", ".txt.bak", ".ini.bak", ".inl.bak"]
exceptfilename = ["resource.h"]
def convert_encoding(filename, target_encoding):
# Backup the origin file.
shutil.copyfile(filename, filename + '.bak')
# convert file from the source encoding to target encoding
content = codecs.open(filename, 'r').read()
source_encoding = chardet.detect(content)['encoding']
if not filename.lower().endswith(tuple(exceptfilename)):
print source_encoding, filename
content = content.decode(source_encoding, 'ignore') #.encode(source_encoding)
codecs.open(filename, 'w', encoding=target_encoding).write(content)
def main():
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
if f.lower().endswith(tuple(ext)):
filename = os.path.join(root, f)
try:
convert_encoding(filename, 'utf-8-sig')
except Exception, e:
print filename
def process_bak_files(action='restore'):
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
if f.lower().endswith(tuple(bakext)):
source = os.path.join(root, f)
target = os.path.join(root, re.sub('\.bak$', '', f, flags=re.IGNORECASE))
try:
if action == 'restore':
shutil.move(source, target)
elif action == 'clear':
os.remove(source)
except Exception, e:
print source
if __name__ == '__main__':
process_bak_files()
#main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment