一个文件的全部替换功能
鱼鱼们早上好这是我看旧版课程写出的文件替换,因为自己不会而想分享一下,不是全自己写的,思路说是话好多问AI的,
而且字符串的内置几乎都没记住全靠鱼总的扩展阅读
哪里错了请指正,谢谢
有更好的办法完善更好,我也好学学,谢谢啦
我没运行,我没运行,我没运行
这是个半成品
# 编写一个程序,实现“全部替换”功能。
# 流程:
# 用户——输入需要替换的文件名字——需要替换的单词或者字符串——输入新的单词或字符串
# 我方——接受对方文件名——接受对方单词or字符串——接受对方新的单词or字符串
#设置函数需要三个传入参数(因为—接受对方文件名—接受对方单词or字符串—接受对方新的单词or字符串)
#打开临时只读文件——处理文件替换需要用什么 1.空列表用于存储处理后的每一行内容2.计数器归零,用于统计总共要替换的单词数量
#所以需要用两个初始变量 一个赋值空列表 一个赋值为0
#因为要全部替换 所以要把文件全都过滤 要用 for XX in 打开文件:
# 把 临时过滤赋值 插入 旧内容 , 计算次数,替换文件到新文件因为之前建立用的 列表 所以要用列表的方式
#增加确定项目 判断 用户输入 确定打开 临时写入文件 把之前的列表写入临时写入文件 关闭临时写入 关闭临时只读
def Replace(file_name,rep_name,new_name):
f_read = open(file_name,'r',encoding='utf-8')
none_list = [ ]
count = 0
for filter_content in f_read:# filter _ content过滤器 _ 内容
if rep_name == filter_content:
count = filter_content.count(rep_name) + count
filter_content = filter_content.replace(rep_name,new_name)
none_list.append(filter_content)#把过滤器内容添加到建立的空列表中
#{ .count(sub[, 起始位[, 结束位]]) }返回 sub 在字符串中不重叠的出现次数,可选参数起始结束
#replace(old, new, count=-1)返回一个将所有 old 参数指定的子字符串替换为 new 的新字符串;
# count 参数指定替换的次数,默认是 -1,表示替换全部
Determine_the_project = input(f'''{file_name}文件的{rep_name}内容共{count}全部替换为{new_name}新内容吗?\n
如果确认请输入 : _yes_\n如果不确认请输入: _no_\n''')
if Determine_the_project == '_yes_':
f_write = open(file_name,'w',encoding='utf-8')
f_write.writelines(none_list)
f_write.close()
f_read.close()
file_name = input('请输入文件名') #file文件名
rep_name = input('请输入需要替换的旧内容')#rep代表名
new_name = input('请输入代替旧内容的新内容')#new新名
Replace(file_name,rep_name,new_name)# Replace 替换 鱼油你好!很高兴看到你分享代码并积极学习。你的思路基本正确,但代码中有几个关键问题需要修正。我来帮你优化一下:
def Replace(file_name, rep_name, new_name):
# 读取文件内容并处理替换
with open(file_name, 'r', encoding='utf-8') as f_read:
lines = f_read.readlines()# 读取所有行到列表
new_lines = []# 存储替换后的行
total_count = 0# 总替换次数计数器
# 遍历每一行进行处理
for line in lines:
# 统计当前行中旧内容出现的次数
count_in_line = line.count(rep_name)
total_count += count_in_line
# 替换当前行中的旧内容为新内容
new_line = line.replace(rep_name, new_name)
new_lines.append(new_line)
# 询问用户确认(放在循环外,只问一次)
if total_count > 0:
confirm = input(f"文件{file_name}中共发现{total_count}个'{rep_name}',是否全部替换为'{new_name}'?(输入yes确认): ")
if confirm.lower() == 'yes':
with open(file_name, 'w', encoding='utf-8') as f_write:
f_write.writelines(new_lines)
print("替换完成!")
else:
print("已取消替换。")
else:
print("未找到需要替换的内容。")
# 获取用户输入
file_name = input('请输入文件名: ')
rep_name = input('请输入需要替换的旧内容: ')
new_name = input('请输入新内容: ')
Replace(file_name, rep_name, new_name)
主要修正点说明:
1. 使用 with open() 自动处理文件关闭,更安全
2. 将用户确认提示移到循环外,避免重复询问
3. 修正了计数逻辑,先统计再替换
4. 添加了未找到内容时的提示
5. 变量命名更清晰(如 new_lines)
优化建议:
- 如果文件很大,可以逐行处理写入临时文件,最后再覆盖原文件
- 可以增加文件存在性检查(用 os.path.exists())
- 替换前可以预览更改内容
继续加油!多动手运行调试能更快进步~
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 file_name = input('请输入文件名:') #file文件名
rep_name= input('请输入旧内容:') #rep代表名
new_name= input('请输入新内容:') #new新名
fp = open(file_name , 'r+')
s = fp . read()
r = new_name . join(s . split(rep_name)) #替换
fp . seek(0 , 0)
fp . write(r)
fp . close() jackz007 发表于 2025-10-23 14:42
大佬,晚上好,谢谢啊真厉害,我去百度搜索才看懂得,join不知道什么意思现在懂了
file_name = input('请输入文件名:') #file文件名
rep_name= input('请输入旧内容:') #rep代表名
new_name= input('请输入新内容:') #new新名
fp = open(file_name , 'r+') #fp是打开文件以 可读写的二进制模式
s = fp . read()# 读取文件转化为字符串
r = new_name . join(s . split(rep_name)) #替换 # 以旧内容为分隔符将分割的字符串添加在新内容后 赋值为r
fp . seek(0 , 0) #文件指针重置
fp . write(r)#文件写入新内容
fp . close()# 关闭文件 qasa 发表于 2025-10-23 19:49
大佬,晚上好,谢谢啊真厉害,我去百度搜索才看懂得,join不知道什么意思现在懂了
file_name = input(' ...
理解基本正确,下面是理解有偏差的地方
fp = open(file_name , 'r+') # 以文本读写模式打开文件
s= fp . read() # 读取整个文件的文本内容到 s
r= new_name . join(s . split(rep_name)) # 以 rep_name 为分隔符,将字符串 s 打断为若干片段,再以 new_name 为媒介,将所有被打断的字符串片段拼接起来成为 r
页:
[1]