|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
name=input("请输入文件名:")
str1=input("请输入需要替换的单词或字符:")
str2=input("请输入新的单词或字符:")
count1=0
count2=0
count3=0
list1=[]
list2=[]
f1=open(name,encoding='utf-8')
for eachline in f1:
list1.append(eachline)
for i in eachline:
if i== str1:
count1=count1+1
f1.close()
print("文件",name,"中共有",count1,"个【",str1,"】")
print("您确定把所有的【",str1,"】替换为【",str2,"】吗:")
judge=input("【yes/no】:")
if judge == "yes":
f1=open(name,'w')
list2=list1
for eachline in list2:
for i in eachline:
if i == str1:
list2[count3]=eachline[:count2]+eachline[count2]+eachline[count2+1:]
count2=count2+1
count3=count3+1
str3=''
for i in list2:
str3=str3+i
f1.write(str3)
f1.close()
上面是代码
下面是错误
请输入文件名:C:\\Users\\DRD\\Desktop\\something.txt
请输入需要替换的单词或字符:愿
请输入新的单词或字符:希望
文件 C:\\Users\\DRD\\Desktop\\something.txt 中共有 4 个【 愿 】
您确定把所有的【 愿 】替换为【 希望 】吗:
【yes/no】:yes
Traceback (most recent call last):
File "G:/新建文件夹 (4)/24.py", line 25, in <module>
list2[count3]=eachline[:count2]+eachline[count2]+eachline[count2+1:]
IndexError: string index out of range
本帖最后由 Twilight6 于 2020-7-25 18:37 编辑
实际上用 list(f1) 或者 f1.readlines() 方法都是直接将文本内容一行一行的读取存为列表,所以这里直接用这两个其中一个方法即可,不用 for 循环一个个添加入列表
建议不要用字符串切片方法来拼接字符串,很容易把自己搞晕的,建议直接用字符串方法 str.replace(old,new),将旧字符串,转为新字符串
然后最后你可以将替换完的字符串添加入另一个列表,或者在原列表上进行改变,用文件方法 writeline() 将列表中的字符串直接写入文件中去
然后你判断字符出现的次数,也可用字符串方法 str.count() 来直接记录,然后加上 count1 上即可
帮你改了下代码,完整代码如下,因为不用切片了,所以很多多余的参数我都帮你去掉了哈~:
- name=input("请输入文件名:")
- str1=input("请输入需要替换的单词或字符:")
- str2=input("请输入新的单词或字符:")
- count1=0
- f1=open(name,encoding='utf-8')
- list1= list(f1)
- f1.close()
- for i in list1:
- if i.count(str1):
- count1=count1+i.count(str1)
- print("文件",name,"中共有",count1,"个【",str1,"】")
- print("您确定把所有的【",str1,"】替换为【",str2,"】吗:")
- judge=input("【yes/no】:")
- if judge == "yes":
- f1=open(name,'w',encoding='utf-8')
- list2 = []
- for eachline in list1:
- if str1 in eachline:
- eachline = eachline.replace(str1,str2)
- list2.append(eachline)
- print(eachline)
- f1.writelines(list2)
- f1.close()
- print('替换完成!')
复制代码
|
|