鱼C论坛

 找回密码
 立即注册
查看: 1459|回复: 12

[已解决]split()函数,这不是我的问题吧?我照着案例写的呀

[复制链接]
发表于 2020-11-23 10:01:31 | 显示全部楼层 |阅读模式

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

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

x
在做小甲鱼老师第29讲的任务,其中有一行:

(role,line_spoken) = each_line.split(':',1)

运行后报错:
  File "F:/Programming/Python/practice/31.0/31.0.py", line 9, in file_cut
    (role,line_spoken) = each_line.split(':',1)
ValueError: not enough values to unpack (expected 2, got 1)

请问这是什么问题呀?我就是按照案例写的呀
最佳答案
2020-11-23 10:42:22
CarterZhang 发表于 2020-11-23 10:22
各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我 ...


你现在运行正常了?
那改回
  1. if each_line[:5] != '=====':
复制代码

试试?
我测试这个地方没有问题的

附源码
  1. f = open('record.txt')

  2. boy = []
  3. girl = []
  4. count = 1

  5. for each_line in f:
  6.     if each_line[:5] != '=====':
  7.         (role,line_spoken) = each_line.split(':',1)
  8.         if role == '小甲鱼':
  9.             boy.append(line_spoken)
  10.         if role == '小客服':
  11.             girl.append(line_spoken)
  12.     else:
  13.         file_name_boy = 'boy_'+str(count)+'.txt'
  14.         file_name_girl = 'girl_'+str(count)+'.txt'

  15.         boy_file = open(file_name_boy,'w')
  16.         girl_file = open(file_name_girl,'w')

  17.         boy_file.writelines(boy)
  18.         girl_file.writelines(girl)

  19.         boy_file.close()
  20.         girl_file.close()

  21.         boy = []
  22.         girl = []
  23.         count += 1

  24. file_name_boy = 'boy_'+str(count)+'.txt'
  25. file_name_girl = 'girl_'+str(count)+'.txt'

  26. boy_file = open(file_name_boy,'w')
  27. girl_file = open(file_name_girl,'w')

  28. boy_file.writelines(boy)
  29. girl_file.writelines(girl)

  30. boy_file.close()
  31. girl_file.close()

  32. f.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 10:06:26 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-23 10:09 编辑

(role,line_spoken) = each_line.split('',1)
      错误的原因是没有找到 split() 方法中给定的分隔符,红色的冒号是中文的,改西文的试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 10:12:33 | 显示全部楼层
没有足够的值取出,期望2个,得到1个,问题已经说明了,你each_line.split(":",1)只得到了一个值,要么查看你的each_line,要么查看":"是否正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 10:12:59 | 显示全部楼层
jackz007 发表于 2020-11-23 10:06
(role,line_spoken) = each_line.split(':',1)
      错误的原因是没有找到 split() 方法中给定的分隔符 ...

但我txt文档里也是中文的呀,改成西文的也同样报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 10:17:41 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-23 10:21 编辑
CarterZhang 发表于 2020-11-23 10:12
但我txt文档里也是中文的呀,改成西文的也同样报错


       这句代码要求 each_line 也就是文件中的每一行必须至少要有一个中文分号存在,否则,就会出错。看看你的文件,是不是每一行都符合这个要求?特别是,不允许有任何的空行存在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 10:22:35 | 显示全部楼层
各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我看一下:
file = open('%s' %file_name)
    for each_line in file:
        if each_line[:6] != '======':
            (role,line_spoken) = each_line.split(':',1)

这是相关的几行代码,出错之前,if each_line[:5] != '====='
当把5改为6之后,程序就可以了。
我认为如果报错,也应该是if这一行报错啊,不应该是split这一行报错。
还请大佬们解答一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 10:25:23 | 显示全部楼层
CarterZhang 发表于 2020-11-23 10:22
各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我 ...

解释器报错时  都是大约上下文,当然也包含精准定位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 10:26:13 | 显示全部楼层
         分割前应该先判断一下。这一句
  1. (role,line_spoken) = each_line.split(':',1)
复制代码

         改为这样试试
  1. if  ':' in each_line :
  2.     (role,line_spoken) = each_line.split(':',1)
复制代码

        当然,后面所有涉及 role 以及 line_spoken 的文件操作也要同时纳入同一个 if 的缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 10:42:22 | 显示全部楼层    本楼为最佳答案   
CarterZhang 发表于 2020-11-23 10:22
各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我 ...


你现在运行正常了?
那改回
  1. if each_line[:5] != '=====':
复制代码

试试?
我测试这个地方没有问题的

附源码
  1. f = open('record.txt')

  2. boy = []
  3. girl = []
  4. count = 1

  5. for each_line in f:
  6.     if each_line[:5] != '=====':
  7.         (role,line_spoken) = each_line.split(':',1)
  8.         if role == '小甲鱼':
  9.             boy.append(line_spoken)
  10.         if role == '小客服':
  11.             girl.append(line_spoken)
  12.     else:
  13.         file_name_boy = 'boy_'+str(count)+'.txt'
  14.         file_name_girl = 'girl_'+str(count)+'.txt'

  15.         boy_file = open(file_name_boy,'w')
  16.         girl_file = open(file_name_girl,'w')

  17.         boy_file.writelines(boy)
  18.         girl_file.writelines(girl)

  19.         boy_file.close()
  20.         girl_file.close()

  21.         boy = []
  22.         girl = []
  23.         count += 1

  24. file_name_boy = 'boy_'+str(count)+'.txt'
  25. file_name_girl = 'girl_'+str(count)+'.txt'

  26. boy_file = open(file_name_boy,'w')
  27. girl_file = open(file_name_girl,'w')

  28. boy_file.writelines(boy)
  29. girl_file.writelines(girl)

  30. boy_file.close()
  31. girl_file.close()

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

使用道具 举报

 楼主| 发表于 2020-11-24 10:40:08 | 显示全部楼层
逃兵 发表于 2020-11-23 10:42
你现在运行正常了?
那改回

答主您好,我说错了。
这是相关的几行代码,出错之前,if each_line[:5] != '====='
当把5改为6之后,程序就可以了。

我之前输入的是if each_line[:5] != "======"
6个等号,问题应该是出在这。
那大佬能解释一下,明明是if这一行错了,为什么报错在下一行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 10:50:10 | 显示全部楼层
CarterZhang 发表于 2020-11-24 10:40
答主您好,我说错了。
我之前输入的是if each_line[:5] != "======"
6个等号,问题应该是出在这。

你输入错误并没有影响到if的语句,语法上是没错的
each_line[:5] != '======' 一直成立,能够运行
所以这一行不会报错

但是你输入错误会导致逻辑上的错误
导致你筛选出来的each_line不是想要的内容
在切割each_line时引发错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 10:55:30 | 显示全部楼层
这个和编辑器有关系,如果你用的是Pycharm,在运行到最后一行是为'\n',
通过if each_line[:6] != '======':  进行判断,照样也能通过,但是这里面却没有‘:’,
不符合(role,line_spoken) = each_line.split(":",1)的判断标准,因此这句话会报错,
如果你在代码中加入这句话,就可以解决问题:
if each_line[:6] != '======':  #分割字符串操作
            if each_line[:5] == '\n':            #判断是否为空格,跳出当前循环,即使程序处理到最后一行文字也
                                                             不会报错
                break
            (role,line_spoken) = each_line.split(":",1)
            if role == "Y":
                boy.append(line_spoken)
            if role == "C":
                girl.append(line_spoken)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-26 22:42:35 | 显示全部楼层
jackz007 发表于 2020-11-23 10:06
(role,line_spoken) = each_line.split(':',1)
      错误的原因是没有找到 split() 方法中给定的分隔符 ...

感谢,原来是这个原因,真大无语事件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 09:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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