鱼C论坛

 找回密码
 立即注册
查看: 1856|回复: 5

[已解决]老版py教程第029讲第四题

[复制链接]
发表于 2020-10-4 01:04:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:4. 编写一个程序,实现“全部替换”功能。
就是要将文件里的字符全部替换
我在对文件进行写操作之后,文件被修改为:<_io.TextIOWrapper name='D:\\somewhat.txt' mode='r' encoding='utf-8'>

我是采用将文件转换为字符串,用字符串的replace BIF,然后再对文件进行写入操作的思想

下面是我的代码:
def file_replace(file_name,replace_character,replaced):
    f=open("D:\\"+file_name,'r',encoding='utf-8')
    str1=str(f)
    str1.replace(replaced,replace_character)
    f.close()
    f=open("D:\\"+file_name,'w',encoding='utf-8')
    f.write(str1)
    f.close()
file_name=input("请输入文件名:   ")
replace_character=input("请输入新的单词或字符:   ")
replaced=input("请输入需要替换的单词或字符:  ")
print("你确定要把所有["+replaced+']替换为['+replace_character+']吗')
yes_or_no=input("【YES/NO】:  ")
if yes_or_no=="yes"or yes_or_no=="YES":
    file_replace(file_name,replace_character,replaced)
else:
    f.close()

希望鱼油们能告诉我问题在哪里,万分感谢
最佳答案
2020-10-4 01:16:38
本帖最后由 疾风怪盗 于 2020-10-4 01:22 编辑
hhxx,hnyq 发表于 2020-10-4 01:06
顶自己一下,我甚至还去改了encoding编码,但我觉得这个只影响在IDLE里print不出现乱码,不影响在.txt文件 ...

str1=str(f.read())
函数里的第二行,打开了文件,但是没有读取,在这行下面打印一下str1看看
 str1=str1.replace(replaced,replace_character)
然后这个replace要个变量接收返回值,否则没有效果,等于没替换

然后一般习惯来说,被替换的先输入吧,新字符后输入,否则总感觉怪怪的
然后整个程序的if后面那个else后面的代码,不知道是什么意思,可以去掉

然后一般比较推荐用with open来打开文件,还有就是没必要打开两次吧,打开一次文件,替换了再写入就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-4 01:06:13 | 显示全部楼层
顶自己一下,我甚至还去改了encoding编码,但我觉得这个只影响在IDLE里print不出现乱码,不影响在.txt文件里的显示emm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-4 01:16:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 疾风怪盗 于 2020-10-4 01:22 编辑
hhxx,hnyq 发表于 2020-10-4 01:06
顶自己一下,我甚至还去改了encoding编码,但我觉得这个只影响在IDLE里print不出现乱码,不影响在.txt文件 ...

str1=str(f.read())
函数里的第二行,打开了文件,但是没有读取,在这行下面打印一下str1看看
 str1=str1.replace(replaced,replace_character)
然后这个replace要个变量接收返回值,否则没有效果,等于没替换

然后一般习惯来说,被替换的先输入吧,新字符后输入,否则总感觉怪怪的
然后整个程序的if后面那个else后面的代码,不知道是什么意思,可以去掉

然后一般比较推荐用with open来打开文件,还有就是没必要打开两次吧,打开一次文件,替换了再写入就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-4 01:43:49 | 显示全部楼层
疾风怪盗 发表于 2020-10-4 01:16
函数里的第二行,打开了文件,但是没有读取,在这行下面打印一下str1看看

然后这个replace要个变 ...

我也发现,得读取之后再转换类型,然后就是文件没有改变,原来是replace的问题,我以为是直接改了之后str1就自动变了,谢谢兄弟
else那里是最开始反应慢了,不调用就不会打开,就不需要关闭
感谢帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-4 01:46:35 | 显示全部楼层
疾风怪盗 发表于 2020-10-4 01:16
函数里的第二行,打开了文件,但是没有读取,在这行下面打印一下str1看看

然后这个replace要个变 ...

内个,然后,读文件和写文件那里我是觉得用'r'读就没法写,用'w'写就没法读,所以打开两次,想请问一下怎么打开一次同时进行读写操作,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-4 02:01:46 From FishC Mobile | 显示全部楼层
hhxx,hnyq 发表于 2020-10-4 01:46
内个,然后,读文件和写文件那里我是觉得用'r'读就没法写,用'w'写就没法读,所以打开两次,想请问一下怎 ...

直接用w啊,就是读写,没说只能写啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 12:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表