全桥整流 发表于 2021-9-17 10:12:13

小甲鱼课后作业29动动手4

t = input('write a name: ')
s = input('write you want to remove word: ')
y = input('write you want word: ')
doc=open(t,'w')
f = doc.read()
k = f.count(s)
print('have %s in %s'%(k,t))
r =input('do you want to remove?(y/n): ')
if r =='y':
    f = f.replace(s,y)
doc.close()

为什么没有效果,改完文件没有变化?
   

   

   
   

全桥整流 发表于 2021-9-17 10:22:46

Traceback (most recent call last):
File "C:\Users\lyl\AppData\Local\Programs\Python\Python39\41.py", line 5, in <module>
    f = doc.read()
io.UnsupportedOperation: not readable

欸啊,改代码改到快疯了

Twilight6 发表于 2021-9-17 10:25:27

全桥整流 发表于 2021-9-17 10:22
Traceback (most recent call last):
File "C:%users\lyl\AppData\Local\Programs\Python\Python39\41.p ...


你打开方式是 'w' 写入打开,当然不能读取~,改成 r+ 试试看

参考代码:
t = input('write a name: ')
s = input('write you want to remove word: ')
y = input('write you want word: ')
doc=open(t,'r+')
f = doc.read()
k = f.count(s)
print('have %s in %s'%(k,t))
r =input('do you want to remove?(y/n): ')
if r =='y':
    f = f.replace(s,y)
doc.close()

全桥整流 发表于 2021-9-17 10:27:06

Twilight6 发表于 2021-9-17 10:25
你打开方式是 'w' 写入打开,当然不能读取~

但是我读取就不能写入了,写入又不能读取,是不是要分两步?

Twilight6 发表于 2021-9-17 10:38:28

全桥整流 发表于 2021-9-17 10:27
但是我读取就不能写入了,写入又不能读取,是不是要分两步?


r+ 是以读写方式打开

另外你代码中只更改了 字符串的 内容

而没有将字符串重新写入文本中去,如果想重新写入文本中,应该在 doc.close() 前加上代码:

doc.write(f)

全桥整流 发表于 2021-9-17 10:38:48

原文件
1231231321111222333123321

运行
====== RESTART: C:\Users\lyl\AppData\Local\Programs\Python\Python39\41.py ======
write a name: 123.txt
write you want to remove word: 2
write you want word: u
have 8 in 123.txt
do you want to remove?(y/n): y

改后文件
12312313211112223331233211u31u313u1111uuu3331u33u1


为什么有些地方改了,又有些地方没有改?
很奇怪

Twilight6 发表于 2021-9-17 10:42:15

全桥整流 发表于 2021-9-17 10:38
原文件
1231231321111222333123321




确定执行的是这个代码吗?

t = input('write a name: ')
s = input('write you want to remove word: ')
y = input('write you want word: ')
doc=open(t,'r+')
f = doc.read()
k = f.count(s)
print('have %s in %s'%(k,t))
r =input('do you want to remove?(y/n): ')
if r =='y':
    f = f.replace(s,y)
doc.close()
doc = open(t,'w')
doc.write(f)
doc.close()

全桥整流 发表于 2021-9-17 10:49:32

Twilight6 发表于 2021-9-17 10:42
确定执行的是这个代码吗?

对,我刚刚重新建了个文件再执行就没有这样的问题了
但是用回原来的文件还是又问题

全桥整流 发表于 2021-9-17 10:50:39

本帖最后由 全桥整流 于 2021-9-17 10:54 编辑

我的代码
t = input('write a name: ')
s = input('write you want to remove word: ')
y = input('write you want word: ')
doc=open(t,'r+')
f = doc.read()
k = f.count(s)
print('have %s in %s'%(k,t))
r =input('do you want to remove?(y/n): ')
if r =='y':
    f = f.replace(s,y)
doc.write(f)
doc.close()
   
   

   
   


你的代码
t = input('write a name: ')
s = input('write you want to remove word: ')
y = input('write you want word: ')
doc=open(t,'r+')
f = doc.read()
k = f.count(s)
print('have %s in %s'%(k,t))
r =input('do you want to remove?(y/n): ')
if r =='y':
    f = f.replace(s,y)
doc.close()
doc = open(t,'w')
doc.write(f)
doc.close()


是我少写了点东西,不好意思。
但是为什么我的代码会只替换一部分?

全桥整流 发表于 2021-9-17 10:55:52

’r+‘是读写模式,按道理我写入应该是和’w‘没有区别的吧

Twilight6 发表于 2021-9-17 11:33:48

全桥整流 发表于 2021-9-17 10:55
’r+‘是读写模式,按道理我写入应该是和’w‘没有区别的吧

r+ 会从开头写入,而 w 是先覆盖为空,然后再写入

全桥整流 发表于 2021-9-17 12:18:32

Twilight6 发表于 2021-9-17 11:33
r+ 会从开头写入,而 w 是先覆盖为空,然后再写入

那我 'r+' 写入,从开头写入,按道理应该不会出现局部替换吧,应该是从第一个我需要替换的单词开始,一直替换到我最后一个需要替换的单词吧

全桥整流 发表于 2021-9-17 12:19:39

Twilight6 发表于 2021-9-17 11:33
r+ 会从开头写入,而 w 是先覆盖为空,然后再写入

应该也不是指针的问题,我重新建了个不一样文件,执行最初的程序也是出现一样的错误

全桥整流 发表于 2021-9-18 09:45:32

我懂了,我的那个是末尾追加,而你的那个是重写
页: [1]
查看完整版本: 小甲鱼课后作业29动动手4