指定文件编码转换
import chardet
import codecs
'''
输入文件路径, 打印出文件类型
example print(readFileType('./stm32f10x_conf.h'))
'''
def readFileType(filePath):
with open(filePath, 'rb') as f:
data = f.read()
print(data)
return chardet.detect(data)['encoding']
def fileEncoding(filePath, fileCoder, transCoding):
data = ''
with codecs.open(filename = filePath, mode = 'r', encoding = fileCoder) as fi:
data = fi.read()
# write() 遇到 \n 会变成 \r\n 但我们这里之前已经是 \r\n 了 所以1次 write()之后变成 \r\r\n
# 故先将先前的 \r 去掉
data = data.replace('\r', '')
with open(filePath, mode = 'w', encoding = transCoding) as fo:
fo.write(data)
# 转换目标编码
transCoding = 'utf-8'
while 1:
# 用户输入文件路径
filePath = input("转 UTF-8 编码文件路径(Q退出):").strip().replace('"', '')
if((len(filePath) != 0)):
if(filePath == 'Q' or filePath == 'q'):
exit()
# 调用转换 查看原文件编码
encodeIn = readFileType(filePath)
# 调用转换 Function 转换文件
fileEncoding(filePath, encodeIn, transCoding)
# 调用转换 查看转换后文件编码
encodeOut = readFileType(filePath)
print(encodeIn, "转:", encodeOut, "完成!")
文件夹下指定后缀文件编码转换
import os
import chardet
import codecs
def readFileType(filePath):
with open(filePath, 'rb') as f:
data = f.read()
return chardet.detect(data)['encoding']
def fileEncoding(filePath, fileCoder, transCoding):
data = ''
with codecs.open(filename = filePath, mode = 'r', encoding = fileCoder) as fi:
data = fi.read()
# write() 遇到 \n 会变成 \r\n 但我们这里之前已经是 \r\n 了 所以1次 write()之后变成 \r\r\n
# 故先将先前的 \r 去掉
data = data.replace('\r', '')
with open(filePath, mode = 'w', encoding = transCoding) as fo:
fo.write(data)
# 转换目标编码
transCoding = 'utf-8'
# 读取当前文件的父目录
dirPath = os.path.dirname(__file__)
# 读取当前文件夹所有 文件名
filesPath = os.listdir(dirPath)
# 筛选出 'xx.c' 和 'xx.h' 文件名
newFilesPath = []
for filePath in filesPath:
if filePath.endswith('.c') or filePath.endswith('.h'):
newFilesPath.append(filePath)
# 为 .c 和 .h 文件添加完整路径
newFilesPath = [os.path.join(dirPath, filePath) for filePath in newFilesPath]
for filePath in newFilesPath:
# 调用转换 查看原文件编码
encodeIn = readFileType(filePath)
# 调用转换 Function 转换文件
fileEncoding(filePath, encodeIn, transCoding)
# 调用转换 查看转换后文件编码
encodeOut = readFileType(filePath)
print(filePath, encodeIn, "转:", encodeOut, "完成!")
os.system('pause')