鱼C论坛

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

[已解决]p30讲中的代码,这个该怎么理解

[复制链接]
发表于 2020-6-7 16:59:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fezoe 于 2020-6-7 17:35 编辑

上不了图
题目大概是小甲鱼跟小客服之间的对话,有三段
然后题目要求是把三段分成6个文档。每一段小甲鱼跟小客服的对话分别存在boy跟girl这两个文档。
然后 这里报错了两个地方。是什么原因啊。
这个文件路径是没错的。我有试过打开的。
然后这个xx.txt里面的内容是:
小甲鱼:到你的的的二付付付付
小助理:大声说那地方上粉底
小甲鱼:顶顶顶顶
小助理:好好好
=================================================
小甲鱼:到你你的爱在那
小助理:大声说到底在哪
小甲鱼:顶顶顶顶就不说
小助理:好好好略略
=================================================
小甲鱼:到你的的的二付
小助理:那地方上粉底
小甲鱼:顶
小助理:好略略

我随便写的

File "E:/study/file/filespilt.py", line 33, in <module>
    split_file('E:\\xx.txt')
  File "E:/study/file/filespilt.py", line 21, in split_file
    (role, line) = i.split(':',1)
ValueError: not enough values to unpack (expected 2, got 1)
是什么原因呢
def save_file(boy,girl,count):
    filename_boy = 'boy_' + str(count) + ".txt"
    filename_girl = 'girl_' + str(count) + ".txt"
    boy_file = open(filename_boy, "w")
    girl_file = open(filename_girl, "w")
    boy_file.writelines(boy)
    girl_file.writelines(girl)
    boy_file.close()
    girl_file.close()
def split_file(file_name):
    f=open(file_name)
    boy=[]
    girl=[]
    count=1
    for i in f:
        if i[:6] != "======":
            (role, line) = i.split(':',1)
            if role == "小甲鱼":
               boy.append(line)
            if role =="小助理":
                girl.append(line)
        else:
            save_file(boy,girl,count)
            boy=[]
            girl=[]
            count +=1
    save_file(boy,girl,count)
    f.close()
split_file('E:\\xx.txt')
最佳答案
2020-6-7 17:20:45
fezoe 发表于 2020-6-7 17:17
对 我就是理解不了这个 所以他是一行一行进行循环吗。一行循环完后,新的一行继续判断 等号 ?

对的  以行为单位 拿来循环 每次都是取一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-7 17:03:32 | 显示全部楼层
你代码错了吧  if 判断 等于号 要在 split 前 不然会报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:04:58 | 显示全部楼层
split要在判断是否为分割线的后面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 17:07:15 | 显示全部楼层
Twilight6 发表于 2020-6-7 17:03
你代码错了吧  if 判断 等于号 要在 split 前 不然会报错的

对 才发现写错了。不过我还是不大理解。 这个只能分割一次的话 是怎么做到 小甲鱼跟小客服的话都分开的。就是不知道怎么运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:14:47 | 显示全部楼层
fezoe 发表于 2020-6-7 17:07
对 才发现写错了。不过我还是不大理解。 这个只能分割一次的话 是怎么做到 小甲鱼跟小客服的话都分开的。 ...

先理解这边把,这个是直接for循环文件,就相当于一行一行拿出来循环
f=open('E:\\xx.txt')
for i in f
所以每一行只有一个人说的话,就是一个冒号所以只需要切割 1 次 ,防止人说的话中带有冒号,通过for循环把每一行切割一次,碰到 === 就停止切割 ,存入新文件中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 17:17:25 | 显示全部楼层
Twilight6 发表于 2020-6-7 17:14
先理解这边把,这个是直接for循环文件,就相当于一行一行拿出来循环

所以每一行只有一个人说的话,就 ...

对 我就是理解不了这个 所以他是一行一行进行循环吗。一行循环完后,新的一行继续判断 等号 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:20:45 | 显示全部楼层    本楼为最佳答案   
fezoe 发表于 2020-6-7 17:17
对 我就是理解不了这个 所以他是一行一行进行循环吗。一行循环完后,新的一行继续判断 等号 ?

对的  以行为单位 拿来循环 每次都是取一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 17:33:51 | 显示全部楼层
Twilight6 发表于 2020-6-7 17:20
对的  以行为单位 拿来循环 每次都是取一行

感谢你,原来是这样!但是我执行了一下,有错误耶 更新在主楼。你能帮我再看看那里错了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:35:58 | 显示全部楼层
fezoe 发表于 2020-6-7 17:33
感谢你,原来是这样!但是我执行了一下,有错误耶 更新在主楼。你能帮我再看看那里错了吗

你txt文件里面用了中文的冒号,把中文冒号改成英文的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 17:45:10 | 显示全部楼层
Twilight6 发表于 2020-6-7 17:35
你txt文件里面用了中文的冒号,把中文冒号改成英文的

soga  太粗心啦  非常感谢你i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:59:17 | 显示全部楼层
fezoe 发表于 2020-6-7 17:45
soga  太粗心啦  非常感谢你i

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 20:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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