fezoe 发表于 2020-6-7 16:59:37

p30讲中的代码,这个该怎么理解

本帖最后由 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')

Twilight6 发表于 2020-6-7 17:03:32

你代码错了吧if 判断 等于号 要在 split 前 不然会报错的

qiuyouzhi 发表于 2020-6-7 17:04:58

split要在判断是否为分割线的后面

fezoe 发表于 2020-6-7 17:07:15

Twilight6 发表于 2020-6-7 17:03
你代码错了吧if 判断 等于号 要在 split 前 不然会报错的

对 才发现写错了。不过我还是不大理解。 这个只能分割一次的话 是怎么做到 小甲鱼跟小客服的话都分开的。就是不知道怎么运行

Twilight6 发表于 2020-6-7 17:14:47

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

先理解这边把,这个是直接for循环文件,就相当于一行一行拿出来循环
f=open('E:\\xx.txt')
for i in f
所以每一行只有一个人说的话,就是一个冒号所以只需要切割 1 次 ,防止人说的话中带有冒号,通过for循环把每一行切割一次,碰到 === 就停止切割 ,存入新文件中

fezoe 发表于 2020-6-7 17:17:25

Twilight6 发表于 2020-6-7 17:14
先理解这边把,这个是直接for循环文件,就相当于一行一行拿出来循环

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

对 我就是理解不了这个 所以他是一行一行进行循环吗。一行循环完后,新的一行继续判断 等号 ?

Twilight6 发表于 2020-6-7 17:20:45

fezoe 发表于 2020-6-7 17:17
对 我就是理解不了这个 所以他是一行一行进行循环吗。一行循环完后,新的一行继续判断 等号 ?

对的以行为单位 拿来循环 每次都是取一行

fezoe 发表于 2020-6-7 17:33:51

Twilight6 发表于 2020-6-7 17:20
对的以行为单位 拿来循环 每次都是取一行

感谢你,原来是这样!但是我执行了一下,有错误耶 更新在主楼。你能帮我再看看那里错了吗

Twilight6 发表于 2020-6-7 17:35:58

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

你txt文件里面用了中文的冒号,把中文冒号改成英文的

fezoe 发表于 2020-6-7 17:45:10

Twilight6 发表于 2020-6-7 17:35
你txt文件里面用了中文的冒号,把中文冒号改成英文的

soga太粗心啦非常感谢你i

Twilight6 发表于 2020-6-7 17:59:17

fezoe 发表于 2020-6-7 17:45
soga太粗心啦非常感谢你i

没事~
页: [1]
查看完整版本: p30讲中的代码,这个该怎么理解