|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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:47 编辑
就挺突然的
看来你是真的不太理解这个
在这里,utf-8不加引号,就会被默认为一个变量,全局都找不到这个变量,就会报错
打引号的话,就是告诉 open函数,你 encoding 的类型。相信在 open 的最底层代码里面,会有一行这样的代码:
- if encoding == 'utf-8':
- # 执行 xxx
- ...
复制代码
相当于你把 'utf-8' 这个字符串赋值给了 encoding,然后底层代码拿着 encoding 去执行
|
|