批处理调用python脚本替换文件内容
一个已经用了很久的python脚本,用来替换文件内容,一直很好用。但最近需要替换一个utf8编码文件ufile中的字符串替换为中文。结果某些内容会变成乱码。
中文字符是写在批处理中的,于是尝试将批处理存为utf8格式,没有效果。
怀疑是ufile读入的时候编码不对,于是在读取文件的操作后,添加了decode('utf-8'),也没有效果,输出文件内容,发现读取是正确的。但替换时提示:
File ".\replace.py", line 19, in ReplaceWord
return p.sub( _newWord, str)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbf in position 0: ordinal
not in range(128)
打印发现参数中的newword已经是乱码。搜索这个错误,有人提出,在文件开头添加
reload(sys)
sys.setdefaultencoding('utf8')
来改变默认编码方式,仍然是乱码
最后,想办法改变批处理输入参数的编码,有人提到,windows批处理默认编码是gbk,需要转换成unicode。于是在输入部分,添加
newword = unicode(sys.argv[4], 'gbk')
并且,批处理要改为ansi格式,utf8仍然导致编码错误
ok了。并且读取文件时的decode可以去掉,不会影响结果
最终的脚本
import re
import string
import sys
import os
import codecs
reload(sys)
sys.setdefaultencoding('utf8')
src_path = sys.argv[1]
des_path = sys.argv[2]
oldword = sys.argv[3]
newword = unicode(sys.argv[4], 'gbk')
c = open(src_path).read()
def ReplaceWord(str, _oldWord, _newWord):
p = re.compile(r'\b%s\b' %_oldWord)
return p.sub( _newWord, str)
c = ReplaceWord(c, oldword, newword)
if des_path == src_path:
os.remove(src_path)
f = file(des_path, 'wb')
f.write(c)
f.close()
调用方式:@%PYTHON_BIN% %RENAME_SCRIPT% %STRINGFILE% %STRINGFILE% appname %APPNAME%
最后两个参数分别是原始字符和要替换成的字符
浙公网安备 33010602011771号