求助
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=eachline[:count2]+eachline+eachline
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=eachline[:count2]+eachline+eachline
IndexError: string index out of range
本帖最后由 nahongyan1997 于 2020-7-25 17:56 编辑
count2+1:是什么意思??
你这代码全是 BUG 。 eachline
你这个索引在最后一个循环的时候出现了下标越界 请看代码:
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
# 这样修改:
if str1 in each_line:
count += 1
list1.append(eachline)
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=eachline[:count2]+eachline+eachline
#
# # 这两句有什么用 ??
# count2=count2+1
# count3=count3+1
# 这样改:
list2 = []
for each_line in list1:
if str1 in each_line:
# 用字符串的替换方法
each_line.replace(str1,str2)
list2.append(each_line)
# 完成!!!!!
str3=''
for i in list2:
str3=str3+i
f1.write(str3)
f1.close() 堕落之翼 发表于 2020-7-25 17:56
eachline
你这个索引在最后一个循环的时候出现了下标越界
请看代码 本帖最后由 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('替换完成!')
堕落之翼 发表于 2020-7-25 17:56
eachline
你这个索引在最后一个循环的时候出现了下标越界
a='1'
a
a
''
这样也算下标越界把。那为什么这样会返回一个空字符串。。。
页:
[1]