第29课:题目 4,“全部替换”功能
本帖最后由 Peteryo01223 于 2021-1-22 16:18 编辑原题目:编写一个程序,实现“全部替换”功能
代码:看了标准答案后,我自己的尝试和注释如下。报错了~
def function1(file_name, old, new): # 根据题目要求,函数中包含三个变量
f1 = open(file_name, encoding = utf-8) # 打开文件,目前不需要书写覆盖,因此默认只读模式即可
content = [] # 建立空列表,专门放置需要做替换文字动作的行。
total = 0 # 统计更换次数,并且最好是使用区别于 BIF中 count 的另一个词。
for eachline in f1: # 在打开的文件中,的某一行
if old in eachline: # 如果这一行包含了 old,即要被替换的字
total = eachline.count(old) # 记录数量为 total 的值
eachline = eachline.replace(old, new) # 此行,即刻做新旧替换
content.append(eachline) # 替换后,把本行记录在content列表里。
decision = input('''\n文件 %s 中一共有 %s 个【%s】\n,
您确定要把所有的【%s】替换为【%s】吗?\n
【Yes/No】:''' \ % (file_name, total, old, old, new))
# 询问用户,是否做出替换的决定
if decision in ['YES', 'Yes', 'yes']:# 如果用户输入yes的三种拼写之一
f2 = open(file_name,'w', encoding = utf-8) # 用可修改格式打开中文文件
f2.writelines(content) # 书写上去
f2.close() # 关闭文件
f1.close() # 关闭文件
file_name = input('请输入文件名:')
old = input('请输入需要替换的单词或字符:')
new = input('请输入新的单词或字符:')
function1(file_name, old, new)
问题:
1. 第15行,这里的\,不对吧?怎么会在%前,无故地放一个\ ?
2. 第19行,为何会出现报错?w 的符号不对么?运行时,这里报错了。
3. 第20行,python是如何知道按顺序,把content里的行,在恰当的位置插入的?因为置换的行,可能分散在不需要置换行的中间某处。
感谢高手们~
本帖最后由 Daniel_Zhang 于 2021-1-22 16:06 编辑
首先,是 encoding = 'utf-8' 不是 encoding = utf-8
其次,第15行那里多了一个 反斜杠 \ 似乎?
然后,写入的话,是按照顺序写入的,如果还是不明白的话可以自己多测试几下,就懂啦{:10_248:} Daniel_Zhang 发表于 2021-1-22 16:05
首先,是 encoding = 'utf-8' 不是 encoding = utf-8
其次,第15行那里多了一个 反斜杠 \ 似乎?
嗯嗯,1. encoding 我用的少,又写错了。2. 我刚要问这个 \ 的问题。我是照抄的小甲鱼,我也没看懂多余的 \ 是什么意思,还是他笔误? Peteryo01223 发表于 2021-1-22 16:08
嗯嗯,1. encoding 我用的少,又写错了。2. 我刚要问这个 \ 的问题。我是照抄的小甲鱼,我也没看懂多余的 ...
那个是续行符
可以自行百度一下 Daniel_Zhang 发表于 2021-1-22 16:12
那个是续行符
可以自行百度一下
谢谢,原来是续行符号。这个 \ 像个多音字,这么多用法啊。
本帖最后由 Peteryo01223 于 2021-1-22 16:20 编辑
按照楼上提示,我改了这3点之后,还是报错,如下:
请输入文件名:F:\\a.txt
请输入需要替换的单词或字符:牛
请输入新的单词或字符:羊羊羊
文件 F:\\a.txt 中一共有 1 个【牛】
,
您确定要把所有的【牛】替换为【羊羊羊】吗?
【Yes/No】:yes
Traceback (most recent call last):
File "C:/Users/user/Desktop/20210122b.py", line 28, in <module>
function1(file_name, old, new)
File "C:/Users/user/Desktop/20210122b.py", line 19, in function1
f2 = open(file_name,'w', encoding = utf-8) # 用可修改格式打开中文文件
NameError: name 'utf' is not defined
>>> 本帖最后由 jackz007 于 2021-1-22 16:31 编辑
f2 = open(file_name,'w', encoding = "utf-8")
同样的毛病,缺少引号。 本帖最后由 Daniel_Zhang 于 2021-1-22 16:47 编辑
Peteryo01223 发表于 2021-1-22 16:19
按照楼上提示,我改了这3点之后,还是报错,如下:
就挺突然的{:10_262:}
看来你是真的不太理解这个
在这里,utf-8不加引号,就会被默认为一个变量,全局都找不到这个变量,就会报错
打引号的话,就是告诉 open函数,你 encoding 的类型。相信在 open 的最底层代码里面,会有一行这样的代码:
if encoding == 'utf-8':
# 执行 xxx
...
相当于你把 'utf-8' 这个字符串赋值给了 encoding,然后底层代码拿着 encoding 去执行 jackz007 发表于 2021-1-22 16:30
f2 = open(file_name,'w', encoding = "utf-8")
同样的毛病,缺少引号。
多谢~
页:
[1]