|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def replace_file(file_name,new_line,b):
f = open(file_name,'r+', encoding='utf-8')
g = f.readlines()
f.seek(0, 0)
for i in g:
i_new = i.replace(new_line,b)
f.write(i_new)
f.close()
def count_line(file_name,new_line):
import re
f = open(file_name, encoding='utf-8')
g = f.readlines()
f.seek(0,0)
message = ''
for line in g:
message += line.rstrip()
c = re.findall(new_line,message)
count = len(c)
return count
file_name = input('请输入文件名:')
new_line = input('请输入需要替换的文字:')
b = input('请输入新的文字:')
c = count_line(file_name,new_line)
print('文件%s中共有%s个%s'%(file_name,c,new_line))
print('您确定要把所有的%s都替换成%s:'%(new_line,b))
temp = input('(YES/NO):')
if temp == 'YES' or 'yes':
replace_file(file_name,new_line,b)
报错:1、'utf-8' codec can't decode byte 0x87 in position 10: invalid start byte
2、'gbk' codec can't decode byte 0xcf in position 53: illegal multibyte sequence
其实本来可以运行的,后面不知道咋的,就一直报错
编码不对的话会出错的,你的文件不一定编码就会统一,
所以用单一的编码是没法做到通用的,你可以用 cchardet 这个库先对编码进行检测,
故对你的代码修改如下(需要安装 cchardet,pip install cchardet):
- file_name = input('请输入文件名:')
- import cchardet
- with open(file_name, 'rb') as f:
- encoding = cchardet.detect(f.read(1024))['encoding']
- def replace_file(file_name,new_line,b):
- f = open(file_name,'r+', encoding=encoding)
- g = f.readlines()
- f.seek(0, 0)
- for i in g:
- i_new = i.replace(new_line,b)
- f.write(i_new)
- f.close()
- def count_line(file_name,new_line):
- import re
- f = open(file_name, encoding=encoding)
- g = f.readlines()
- f.seek(0,0)
- message = ''
- for line in g:
- message += line.rstrip()
- c = re.findall(new_line,message)
- count = len(c)
- return count
- new_line = input('请输入需要替换的文字:')
- b = input('请输入新的文字:')
- c = count_line(file_name,new_line)
- print('文件%s中共有%s个%s'%(file_name,c,new_line))
- print('您确定要把所有的%s都替换成%s:'%(new_line,b))
- temp = input('(YES/NO):')
- if temp == 'YES' or 'yes':
- replace_file(file_name,new_line,b)
复制代码
|
|