鱼C论坛

 找回密码
 立即注册
查看: 2181|回复: 6

[已解决]关于29讲课后作业的第4道问题

[复制链接]
发表于 2017-8-21 17:46:08 | 显示全部楼层 |阅读模式

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

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

x
  1. def file_replace(file_name, rep_word, new_word):
  2.     f_read = open(file_name)        #打开文件

  3.     content = []        #需修改的new_word
  4.     count = 0
  5.     count_1 = 0      #记录rep_word出现次数

  6.     for eachline in f_read:         #每一行遍历
  7.         if rep_word in eachline:
  8.             count = eachline.count(rep_word)        #返回rep_word的字符串里边出现的次数
  9.             if count == 1:
  10.                 count_1 += 1
  11.             eachline = eachline.replace(rep_word, new_word)
  12.         content.append(eachline)

  13.     decide = input('\n文件 %s  中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' % (file_name, count_1, rep_word, rep_word, new_word))

  14.     if decide in ['YES', 'Yes', 'yes']:
  15.         f_write = open(file_name, 'w')
  16.         f_write.writelines(content)
  17.         f_write.close()

  18.     f_read.close()

  19. file_name = input('请输入文件名:')
  20. rep_word = input('请输入需要替换的单词或字符:')
  21. new_word = input('请输入新的单词或字符:')
  22. file_replace(file_name, rep_word, new_word)
复制代码


上面是小甲鱼的代码,我的问题是writelines写入的时候怎么定位到“愿”这个字,而且替换成“希望”的。
writelines这个方法在小甲鱼发的文章中不是只有向文件写入字符串序列seq吗?
第29讲的链接:http://bbs.fishc.com/thread-45487-1-2.html
最佳答案
2017-8-21 17:57:57
这个代码的思路是这样的:

打开文件以后,遍历文件内容(一行一行地检查)
比如我检查完这一行以后,统计出来有多少处替换,然后我把这行字符串做好替换(可以看到用了eachline.replace)以后,新的已经替换好了的内容加入到content这个列表里面。

最后用户确认要修改以后,一行一行地把content中的内容写进文件。(可以看到writelines的参数是content)
所以你说的定位问题,writelines是不会定位替换的,它只负责把内容seq一行一行地写入文件。
定位和替换是在遍历那部分就做了,
定位是if rep_word in eachline(其实没有定位在第几个字出现)
替换是eachline.replace()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-21 17:55:43 | 显示全部楼层
不用手动定位,用for遍历每一行的时候发现有要替换的字词,调用字符串的方法replace()就可以替换了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 17:57:57 | 显示全部楼层    本楼为最佳答案   
这个代码的思路是这样的:

打开文件以后,遍历文件内容(一行一行地检查)
比如我检查完这一行以后,统计出来有多少处替换,然后我把这行字符串做好替换(可以看到用了eachline.replace)以后,新的已经替换好了的内容加入到content这个列表里面。

最后用户确认要修改以后,一行一行地把content中的内容写进文件。(可以看到writelines的参数是content)
所以你说的定位问题,writelines是不会定位替换的,它只负责把内容seq一行一行地写入文件。
定位和替换是在遍历那部分就做了,
定位是if rep_word in eachline(其实没有定位在第几个字出现)
替换是eachline.replace()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 19:40:14 | 显示全部楼层
f.writelines(seq)
        向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象

2017-08-21_193734.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 20:54:15 | 显示全部楼层

>>> class Fibs:
        def _init_(self):
                self.a = a
                self.b = 1
        def _iter_(self):
                return self
        def _next_(self):
                self.a,self.b = self.b,self,self.a + self.b
                return self.a

       
>>> fibs = Fibs()
>>> for each in fibs:
        print(each)

运行代码报错:Traceback (most recent call last):
  File "E:/study/Python/fibs_iter_demo.py", line 14, in <module>
    for each in fibs:
TypeError: 'Fibs' object is not iterable
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-23 19:27:52 | 显示全部楼层
逄逄 发表于 2017-8-21 17:57
这个代码的思路是这样的:

打开文件以后,遍历文件内容(一行一行地检查)

谢谢你的解答^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-24 11:09:54 | 显示全部楼层

不客气。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-27 19:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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