鱼C论坛

 找回密码
 立即注册
查看: 2527|回复: 7

有关替换的问题

[复制链接]
发表于 2019-8-6 13:04:20 | 显示全部楼层 |阅读模式

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

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

x
def replace():
    file = input('请输入文件名:')
    fileopen = open(file)
    word = input('请输入需要替换的单词或字符:')
    newword = input('请输入新的单词或字符:')
    num = 0
    for eachline in fileopen:
        if word in eachline:
            num += eachline.count(word)
    print('文件',file,'中共有%d个%s' % (num,str(word)))
    print('您确定要把所有',word,'替换为',newword,'吗?')
    choice = input('【yes/no】:')
    while choice != 'yes' and choice != 'no':
        choice = input('【yes/no】:')
    if choice == 'yes':
        for eachline in fileopen:
            if word in eachline:
                eachline = eachline.replace(word,newword)
            print(eachline)
    if choice == 'no':
        print('感谢您的使用')
    return fileopen.close()

   
这是我自己写的替换的代码,很奇怪,这一段:
if choice == 'yes':
        for eachline in fileopen:
            if word in eachline:
                eachline = eachline.replace(word,newword)
            print(eachline)
替换的程序不能执行,可以统计出多少想要替换的字符但是不能替换,不知道为什么。谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-6 13:15:55 From FishC Mobile | 显示全部楼层
eachline只是一个临时变量,你替换它,却是和原始数据无关
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 13:33:15 | 显示全部楼层
因为在前面代码
for eachline in fileopen:
        if word in eachline:
            num += eachline.count(word)
这个执行完以后,将文件读了一遍,文件读取指针已经移动到文件末尾了
所以你再在后面再去执行 for eachline in fileopen: 时,光标在文件末尾,没法重新再读;需要重新指定指针的位置
修改后代码如下
  1. def replace():
  2.     file = input('请输入文件名:')
  3.     fileopen = open(file)
  4.     word = input('请输入需要替换的单词或字符:')
  5.     newword = input('请输入新的单词或字符:')
  6.     num = 0
  7.     for eachline in fileopen:
  8.         if word in eachline:
  9.             num += eachline.count(word)
  10.     print('文件',file,'中共有%d个%s' % (num,str(word)))
  11.     print('您确定要把所有',word,'替换为',newword,'吗?')
  12.     choice = input('【yes/no】:')
  13.     while choice != 'yes' and choice != 'no':
  14.         choice = input('【yes/no】:')
  15.     if choice == 'yes':
  16.         fileopen.seek(0)  ####添加这一句表示将光标移动到文件开头
  17.         for eachline in fileopen:
  18.             if word in eachline:
  19.                 eachline = eachline.replace(word,newword)
  20.             print(eachline)
  21.     if choice == 'no':
  22.         print('感谢您的使用')
  23.     return fileopen.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 13:34:12 | 显示全部楼层
另外,你的这个代码中,修改后没有保存文件;也没有关闭文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-6 15:13:08 | 显示全部楼层
Jery_wang09 发表于 2019-8-6 13:34
另外,你的这个代码中,修改后没有保存文件;也没有关闭文件

谢谢大佬,我刚刚加了指针的那个代码可以了,但是说到这个保存,是怎么样写呢,我只会关闭而已,没有保存。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 16:23:37 | 显示全部楼层
winter宇 发表于 2019-8-6 15:13
谢谢大佬,我刚刚加了指针的那个代码可以了,但是说到这个保存,是怎么样写呢,我只会关闭而已,没有保存 ...

主要通过几个参数来实现保存
我大概写了下,你参考下
  1. def replace():
  2.     file = input('请输入文件名:')
  3.     fileopen = open(file)
  4.     word = input('请输入需要替换的单词或字符:')
  5.     newword = input('请输入新的单词或字符:')
  6.     num = 0
  7.     for eachline in fileopen:
  8.         if word in eachline:
  9.             num += eachline.count(word)
  10.     fileopen.seek(0,0)  ####添加这一句表示将光标移动到文件开头
  11.    
  12.     print('文件',file,'中共有%d个%s' % (num,str(word)))
  13.     print('您确定要把所有',word,'替换为',newword,'吗?')
  14.     choice = input('【yes/no】:')
  15.     while choice != 'yes' and choice != 'no':
  16.         choice = input('【yes/no】:')

  17.     newfilename = "new_" + file
  18.     newfile = open(newfilename,"w+")
  19.     if choice == 'yes':     
  20.         for eachline in fileopen:
  21.             #print(eachline)
  22.             if word in eachline:
  23.                 eachline = eachline.replace(word,newword)
  24.             #print(eachline)
  25.             newfile.write(eachline)
  26.     fileopen.close()
  27.     newfile.close()
  28.     if choice == 'no':
  29.         print('感谢您的使用')
  30.     return fileopen.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 16:24:47 | 显示全部楼层
看看这里面的参数说明
https://www.cnblogs.com/pantom0122/p/9403946.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-6 17:07:46 | 显示全部楼层
Jery_wang09 发表于 2019-8-6 16:23
主要通过几个参数来实现保存
我大概写了下,你参考下

这个有点像小甲鱼的参考答案,我只是不明白这一段:
            if word in eachline:
                eachline = eachline.replace(word,newword)
            #print(eachline)
            newfile.write(eachline),
eachline = eachline.replace(word,newword)这一句是实现对字符的替换,然后我不清楚newfile.write(eachline)是不是就是对替换后的文件的保存呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 11:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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