鱼C论坛

 找回密码
 立即注册
查看: 2354|回复: 10

[已解决]文件颜值

[复制链接]
发表于 2021-6-9 21:07:00 | 显示全部楼层 |阅读模式

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

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

x
大佬们,为什么会这样报错啊?
最佳答案
2021-6-10 16:41:37
正天圣人 发表于 2021-6-10 16:08
大佬,我把改成这样了,可是为什么第一句话还是小客服啊?
a=open('record (3).txt')
x=1

  1. a=open('record.txt')
  2. x=1
  3. def han():
  4.     global x
  5.     x=str(x)
  6.     q=open('boy_'+x+'.txt','w')
  7.     w=open('girl_'+x+'.txt','w')
  8.     for i in a:
  9.         if "==========" in i:
  10.             x=int(x)
  11.             x=x+1
  12.             han()
  13.         else:
  14.             (wu, k) = i.split(':', 1)
  15.             if '小甲鱼' == wu:
  16.                 q.write(k)
  17.             elif '小客服' == wu:
  18.                 w.write(k)

  19. han()
复制代码
第三十一讲002.PNG
第三十一讲003.PNG
第三十一讲001.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-9 21:07:36 | 显示全部楼层
a=open('record (3).txt')
x=1
def han():
    global x
    x=str(x)
    q=open('boy_'+x+'.txt','w')
    w=open('girl_'+x+'.txt','w')
    for i in a:
        b=a.readline()
        if '小甲鱼' in i:
            a.replace('小甲鱼:','')
            q.write(b)
        elif '小客服' in i:
            a.replace('小客服:','')
            w.write(b)
        elif "==========" in i:
            x=int(x)
            x=x+1
            han()
            break
han()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 21:38:42 | 显示全部楼层
正天圣人 发表于 2021-6-9 21:07
a=open('record (3).txt')
x=1
def han():


你不能对文件对象进行 replace 呀,这是字符串的方法

还要 replace 不是在原对象上进行修改的,你对一个字符串执行了 replace 需要那一个变量来接收替换后的字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 21:43:29 | 显示全部楼层
正天圣人 发表于 2021-6-9 21:07
a=open('record (3).txt')
x=1
def han():




认真看了下你的代码,还有 for 循环 a 文件对象了,那么文件每次循环都会向下移动一行

但是你还在 for 循环中加了 a.readline() 导致每次 for 循环 文件指针移动两行

而你还进行了递归,肯定会导致有些递归读取到的是空文件,因为你每次读取的文件对象都是同一个,而且最后文件指针会移动到文本末尾了

帮你改了下代码,参考下吧:

  1. a = open('record.txt', encoding='utf-8')

  2. x = 1

  3. def han():
  4.     global x
  5.     q = open('boy_%d.txt' % x, 'w', encoding='utf-8')
  6.     w = open('girl_%d.txt' % x, 'w', encoding='utf-8')
  7.     for i in a:
  8.         if '小甲鱼' in i:
  9.             b = i.replace('小甲鱼:', '')
  10.             q.write(b)
  11.         elif '小客服' in i:
  12.             b = i.replace('小客服:', '')
  13.             w.write(b)
  14.         elif "=======" in i:
  15.             x = x + 1
  16.             han()

  17. han()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 22:05:33 | 显示全部楼层
Twilight6 发表于 2021-6-9 21:43
认真看了下你的代码,还有 for 循环 a 文件对象了,那么文件每次循环都会向下移动一行

但是你还 ...

大佬,我把改成这样了
a=open('record (3).txt')
x=1
def han():
    global x
    x=str(x)
    q=open('boy_'+x+'.txt','w')
    w=open('girl_'+x+'.txt','w')
    for i in a:
        if '小甲鱼' in i:
            i.replace('小甲鱼:','')
            q.write(i)
        elif '小客服' in i:
            i.replace('小客服:','')
            w.write(i)
        elif "==========" in i:
            x=int(x)
            x=x+1
            han()
han()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 22:06:28 | 显示全部楼层
Twilight6 发表于 2021-6-9 21:43
认真看了下你的代码,还有 for 循环 a 文件对象了,那么文件每次循环都会向下移动一行

但是你还 ...

可是,第一行为什么是小客服?
第三十一讲004.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 22:55:57 | 显示全部楼层
Twilight6 发表于 2021-6-9 21:43
认真看了下你的代码,还有 for 循环 a 文件对象了,那么文件每次循环都会向下移动一行

但是你还 ...

建议用split()对 聊天对话 进行分割
举例:
小客服:小甲鱼, 今天有客户问你有没有女朋友
你的代码会把这句话保存到boy_1.txt中
但这明显是不符合项目需求的
用split()分割后,只判断左边的对话人物就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 23:09:02 | 显示全部楼层
正天圣人 发表于 2021-6-9 22:06
可是,第一行为什么是小客服?


那么你就像甲鱼哥那样用 split 即可

或者用切片,参考代码:

  1. a = open('record.txt', encoding='utf-8')
  2. x = 1

  3. def han():
  4.     global x
  5.     q = open('boy_%d.txt' % x, 'w', encoding='utf-8')
  6.     w = open('girl_%d.txt' % x, 'w', encoding='utf-8')
  7.     for i in a:
  8.         if '小甲鱼' in i[:3]:
  9.             q.write(i)
  10.         elif '小客服' in i[:3]:
  11.             w.write(i)
  12.         elif "=======" in i:
  13.             x = x + 1
  14.             han()

  15. han()
复制代码


你这里的 replace 没意义,原因看前几楼的说明

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 16:08:26 | 显示全部楼层
Twilight6 发表于 2021-6-9 23:09
那么你就像甲鱼哥那样用 split 即可

或者用切片,参考代码:

大佬,我把改成这样了,可是为什么第一句话还是小客服啊?
a=open('record (3).txt')
x=1
def han():
    global x
    x=str(x)
    q=open('boy_'+x+'.txt','w')
    w=open('girl_'+x+'.txt','w')
    for i in a:
        if '小甲鱼' in i:
            (wu,k)=i.split(':',1)
            q.write(k)
        elif '小客服' in i:
            (wu,k)=i.split(':',1)
            w.write(k)
        elif "==========" in i:
            x=int(x)
            x=x+1
            han()
han()
        
而且,关于replace是不是因为只能操作字符串,而这里的i不是字符串,所以用不了啊?
第三十讲006.PNG
特殊.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 16:41:37 | 显示全部楼层    本楼为最佳答案   
正天圣人 发表于 2021-6-10 16:08
大佬,我把改成这样了,可是为什么第一句话还是小客服啊?
a=open('record (3).txt')
x=1

  1. a=open('record.txt')
  2. x=1
  3. def han():
  4.     global x
  5.     x=str(x)
  6.     q=open('boy_'+x+'.txt','w')
  7.     w=open('girl_'+x+'.txt','w')
  8.     for i in a:
  9.         if "==========" in i:
  10.             x=int(x)
  11.             x=x+1
  12.             han()
  13.         else:
  14.             (wu, k) = i.split(':', 1)
  15.             if '小甲鱼' == wu:
  16.                 q.write(k)
  17.             elif '小客服' == wu:
  18.                 w.write(k)

  19. han()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 19:47:11 | 显示全部楼层

谢谢大佬,我知道我错在哪里了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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