hhxx,hnyq 发表于 2020-10-4 01:04:13

老版py教程第029讲第四题

题目: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()

希望鱼油们能告诉我问题在哪里,万分感谢

hhxx,hnyq 发表于 2020-10-4 01:06:13

顶自己一下,我甚至还去改了encoding编码,但我觉得这个只影响在IDLE里print不出现乱码,不影响在.txt文件里的显示emm

疾风怪盗 发表于 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来打开文件,还有就是没必要打开两次吧,打开一次文件,替换了再写入就行了

hhxx,hnyq 发表于 2020-10-4 01:43:49

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

然后这个replace要个变 ...

我也发现,得读取之后再转换类型,然后就是文件没有改变,原来是replace的问题,我以为是直接改了之后str1就自动变了,谢谢兄弟
else那里是最开始反应慢了,不调用就不会打开,就不需要关闭
感谢帮助

hhxx,hnyq 发表于 2020-10-4 01:46:35

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

然后这个replace要个变 ...

内个,然后,读文件和写文件那里我是觉得用'r'读就没法写,用'w'写就没法读,所以打开两次,想请问一下怎么打开一次同时进行读写操作,谢谢

疾风怪盗 发表于 2020-10-4 02:01:46

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

直接用w啊,就是读写,没说只能写啊
页: [1]
查看完整版本: 老版py教程第029讲第四题