from tempfile import mkstemp
from shutil import move
from os import fdopen, remove
import os
from chardet.universaldetector import UniversalDetector
patterns = [
"android.support.v7.app.AppCompatActivity",
"android.support.v4.app.ActivityCompat",
"android.support.v7.widget.Toolbar",
"android.support.v4.content.FileProvider",
"android.support.v4.content.ContextCompat"
]
corresponding = [
"androidx.appcompat.app.AppCompatActivity",
"androidx.core.app.ActivityCompat",
"androidx.appcompat.widget.Toolbar",
"androidx.core.content.FileProvider",
"androidx.core.content.ContextCompat"
]
def get_encode_info(file):
with open(file, 'rb') as f:
detector = UniversalDetector()
for line in f.readlines():
detector.feed(line)
if detector.done:
break
detector.close()
return detector.result['encoding']
def read_file(file):
with open(file, 'rb') as f:
return f.read()
def write_file(content, file):
with open(file, 'wb') as f:
f.write(content)
def conver(file, original_encode, des_encode):
file_content = read_file(file)
file_decode = file_content.decode(original_encode,'ignore')
file_encode = file_decode.encode(des_encode)
write_file(file_encode, file)
def replace(file_path, pattern, subst):
encode_info = get_encode_info(file_path)
print(encode_info)
if encode_info != 'UTF-8':
print("换")
conver(file_path, encode_info, 'UTF-8')
#Create temp file
fh, abs_path = mkstemp()
with fdopen(fh,'w', encoding='UTF-8') as new_file:
with open(file_path,'r', encoding='UTF-8') as old_file:
for line in old_file:
# print(line)
line = line.replace(pattern, subst)
new_file.write(line)
#Remove original file
remove(file_path)
#Move new file
move(abs_path, file_path)
for root, dirs, files in os.walk('C:\\Users\\ASUS\\Desktop\\try\\network\\src\\main\\java\\com\\example\\network', topdown=False):
print(root.split('\\')[-1], '下java文件个数', len(files))
for file in files:
full_path = (root+'\\'+file).replace('\\', '\\\\')
print(full_path)
for i in range(len(patterns)):
replace(full_path, patterns[i], corresponding[i])
批量替换文本内容,并自动转换文件编码
最新推荐文章于 2023-03-23 13:32:04 发布