鱼C论坛

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

[已解决]求助一下文档的写入问题

[复制链接]
发表于 2019-3-30 22:18:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 kklnkklnkkln 于 2019-3-31 00:42 编辑
  1. def file_replace(file_name,rep_word,new_word):
  2.     f_read = open(file_name)

  3.     content = []
  4.     conut = 0

  5.     for eachline in f_read:
  6.         if rep_word in eachline:
  7.             count += eachline.count(rep_word)
  8.             eachline = eachline.replace(rep_word,new_word)
  9.         content.append(eachline)


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


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


  16.     f_read.close()


  17. file_name = input('请输入文件名:')
  18. rep_word = input('请输入要替换的单词或者字符:')
  19. new_word = input('请输入新的单词或者字符:')

  20. file_replace(file_name,rep_word,new_word)
复制代码



f_write.writelines(content)为什么这一行代码能精准的替代原有的位置?
content只是储存了 新的替换文字啊,还是说储存的时候已经把原有的位置也记住了?新的写入直接写入原有的位置?
最佳答案
2019-3-31 21:27:23
'w'有新的东西往里写才会覆盖,不写就不覆盖。
  1. f_write = open(file_name,'w')
复制代码


writelines的时候没有替换工作,替换工作在eachline.replace(rep_word,new_word)已经完成了。

写入文件的语句是这个:
  1. f_write.writelines(content)
复制代码

content是你写入到文件的内容,这个content的构建是在前面那个for循环里面完成的。

看前面那个for循环,是把每一句话都放到contnet里面了,最后写入文件的时候也是按顺序写进去就完事了,不涉及「自动找到替换前的位置」
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-3-31 00:41:37 | 显示全部楼层
f_write = open(file_name,'w')  

文本中w的打开方式是  覆盖原有内容
写入的也只是content的列表,为什么内容只有修改的文字变了,而整体文字没有被覆盖?

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

使用道具 举报

发表于 2019-3-31 02:15:13 | 显示全部楼层
看前面for循环这块,他是把替换后的每句话,挨个放到了content中,所以content中里面存的是替换了字符串后的所有文本内容。
  1.     for eachline in f_read:
  2.         if rep_word in eachline:
  3.             count += eachline.count(rep_word)
  4.             eachline = eachline.replace(rep_word,new_word)
  5.         content.append(eachline)
复制代码


再看下面这段,你输入yes之后,它会把content中的内容(已经替换了对应的字符串)写入到文件中,
如果不是yes,就不修改原文档
  1. if decide in ['YES','Yes','yes']:
  2.         f_write = open(file_name,'w')
  3.         f_write.writelines(content)
  4.         f_write.close()
复制代码

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

使用道具 举报

 楼主| 发表于 2019-3-31 12:48:45 | 显示全部楼层
shuofxz 发表于 2019-3-31 02:15
看前面for循环这块,他是把替换后的每句话,挨个放到了content中,所以content中里面存的是替换了字符串后 ...
  1. eachline = eachline.replace(rep_word,new_word)
复制代码



这一行代码是把新的字符替换了 旧的字符,
用writelines 写入的时候 会自动找到替换前的位置,然后把新的写入到原有的位置吗?
主要是没弄懂,是怎么只替换原有字符串,而不改变其他的字符,
用‘w’ 的 方式写入 我记得是要覆盖原来所有有内容啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-31 21:27:23 | 显示全部楼层    本楼为最佳答案   
'w'有新的东西往里写才会覆盖,不写就不覆盖。
  1. f_write = open(file_name,'w')
复制代码


writelines的时候没有替换工作,替换工作在eachline.replace(rep_word,new_word)已经完成了。

写入文件的语句是这个:
  1. f_write.writelines(content)
复制代码

content是你写入到文件的内容,这个content的构建是在前面那个for循环里面完成的。

看前面那个for循环,是把每一句话都放到contnet里面了,最后写入文件的时候也是按顺序写进去就完事了,不涉及「自动找到替换前的位置」
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-1 00:38:37 | 显示全部楼层
shuofxz 发表于 2019-3-31 21:27
'w'有新的东西往里写才会覆盖,不写就不覆盖。

大佬,最后问一个问题

  1. eachline = eachline.replace(rep_word,new_word)
复制代码

这行代码是,修改完单条语句后,然后再放到列表里面的,是已经替换成功的语句,

但是没有被修改的语句是没有被加入到content列表里面的

第一次是只读模式打开,把修改完后的语句添加到列表,

第二次是写入模式打开,相当于文件里面还是原有的内容没有变,是如何替换掉的

在原有的TXT文档里面,用‘‘w’方式写入新的,为什么没有覆盖没有修改的语句,而只替换了修改过的语句
主要是这里没弄懂,





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

使用道具 举报

发表于 2019-4-1 09:31:23 | 显示全部楼层
本帖最后由 shuofxz 于 2019-4-1 09:35 编辑
kklnkklnkkln 发表于 2019-4-1 00:38
大佬,最后问一个问题


看这个for循环,每一句话都被遍历了,在eachline里面。
如果包含要替换的单词,eachline里面对应的词会被替换然后放到content里面,没有要替换的词直接把eachline放到content里面。所以eachline里面是保存了所有行的信息的。
  1.     for eachline in f_read:
  2.         if rep_word in eachline:
  3.             count += eachline.count(rep_word)
  4.             eachline = eachline.replace(rep_word,new_word)
  5.         content.append(eachline)
复制代码


这里「为什么没有覆盖没有修改的语句,而只替换了修改过的语句」,不是没覆盖没修改的语句,而是content里面存了所有的语句,把原来的全都覆盖了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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