lichanglin1987 发表于 2020-4-13 10:42:32

PYTHON29J讲课后作业

def RE(name,old_name,new_name):
    f = open(name)
    list1 = []
    cont = f.read().count(old_name)
    print('文件%s中共有%d个【%s】'%(name,cont,old_name))
    print('您确定要把所有的【%s】替换为【%s】吗?'%(old_name,new_name))
    for eachline in f:
      eachline = eachline.replace(old_name,new_name)
      list1.append(eachline)
    temp = input('YSE/NO:')
    if temp == 'YES':
      f2 = open(name,'w')
      f2.writelines(list1)
      print(f.read())
      f2.close()

    f.close()
   



name = input('请输入文件名:')
old_name = input('请输入需要替换的单词或者字符:')
new_name = input('请输入新的单词或者字符:')
RE(name,old_name,new_name)

为什么我运行输入YES之后,就啥也没有了??

qiuyouzhi 发表于 2020-4-13 10:45:43

你用w模式打开的文件,当然啥都没有了。。。

lichanglin1987 发表于 2020-4-13 10:53:13

qiuyouzhi 发表于 2020-4-13 10:45
你用w模式打开的文件,当然啥都没有了。。。

为啥?我不是写入了么

qiuyouzhi 发表于 2020-4-13 10:55:03

lichanglin1987 发表于 2020-4-13 10:53
为啥?我不是写入了么

w会覆盖原有的文件内容

Hoiste 发表于 2020-4-13 11:02:36

本帖最后由 Hoiste 于 2020-4-13 11:08 编辑

你在cont计算出现次数的时候用read()读完了文件,文件当前指针在末尾了,再遍历从末尾开始,所以什么都没有,你的列表其实也是空的,所以不要用read()或者重置一下文件指针,我改了你的方法用了前者,代码改了一下结构:
def RE(name,old_name,new_name):
    f = open(name)
    list1 = []
    cont = 0
    for eachline in f:
      cont += eachline.count(old_name)
      eachline = eachline.replace(old_name,new_name)
      list1.append(eachline)
    print('文件%s中共有%d个【%s】'%(name,cont,old_name))
    print('您确定要把所有的【%s】替换为【%s】吗?'%(old_name,new_name))
    temp = input('YSE/NO:')
    if temp == 'YES':
      f2 = open(name,'w')
      f2.writelines(list1)
      print(f.read())
      f2.close()

    f.close()
   



name = input('请输入文件名:')
old_name = input('请输入需要替换的单词或者字符:')
new_name = input('请输入新的单词或者字符:')
RE(name,old_name,new_name)


Hoiste 发表于 2020-4-13 11:03:24

qiuyouzhi 发表于 2020-4-13 10:55
w会覆盖原有的文件内容

问题是那个read哦,内容已经存在列表里了,用w打开是为了把再次填入改好的内容。

qiuyouzhi 发表于 2020-4-13 11:05:29

Hoiste 发表于 2020-4-13 11:03
问题是那个read哦,内容已经存在列表里了,用w打开是为了把再次填入改好的内容。

哦哦,好的

lichanglin1987 发表于 2020-4-13 11:30:47

Hoiste 发表于 2020-4-13 11:02
你在cont计算出现次数的时候用read()读完了文件,文件当前指针在末尾了,再遍历从末尾开始,所以什么都没有 ...

好的,所以如果代码不变,重置一下指针或者重新打开一次文件也是可行的是吧?

Hoiste 发表于 2020-4-13 11:42:38

lichanglin1987 发表于 2020-4-13 11:30
好的,所以如果代码不变,重置一下指针或者重新打开一次文件也是可行的是吧?

是的,不过重新打开同一个文件只是为了重置指针的话没必要而且可能会出问题,用seek方法移动到初始位置就好了。
页: [1]
查看完整版本: PYTHON29J讲课后作业