鱼C论坛

 找回密码
 立即注册
查看: 4368|回复: 6

[已解决]关于python的字符串分割的报错提示疑问

[复制链接]
发表于 2017-4-20 09:31:30 | 显示全部楼层 |阅读模式

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

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

x
  在《零基础入门学习Python》29节课中,跟着甲鱼老师的步骤敲得代码,结果我的就报错。可能是版本的问题吗?我的代码如下
求各位大神能给予解答~~非常感谢。
f = open('record.txt')

jia = []
yi = []
count = 1

for each_line in f:
    if each_line[:5]!='=====':
        (role, line_spoken) = each_line.split(':',1)
        if role == '甲':
            jia.append(line_spoken)
        if role == '乙':
            yi.append(line_spoken)
    else:
        file_name_jia ='jia_'+ str(count)+'.txt'
        file_name_yi ='yi_'+ str(count)+'.txt'

        jia_file = open(file_name_jia,'w')
        yi_file = open(file_name_yi,'w')

        jia_file.writelines(jia)
        yi_file.writelines(yi)

        jia_file.close()
        yi_file.close()

        jia = []
        yi = []
        count +=1

f.close()
报错如下:
================== RESTART: C:/Users/LiJW/Desktop/test1.py ==================
Traceback (most recent call last):
  File "C:/Users/LiJW/Desktop/test1.py", line 9, in <module>
    (role, line_spoken) = each_line.split(':',1)
ValueError: not enough values to unpack (expected 2, got 1)
>>>


我的文件是 在桌面保存的一哥txt文档,随便找了几段甲乙的简单对话

最佳答案
2017-4-20 09:40:56
(role, line_spoken) = each_line.split(':',1)
这一句你有两个变量,但却只有一个值,无法赋值给两个变量
你后边的确分割成两部分,而你后边参数是1取得是分割次数,分割后返回的是一个列表,你的赋值表达式只会将列表直接给第一个变量,而第二个变量没有值,那就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-20 09:40:56 | 显示全部楼层    本楼为最佳答案   
(role, line_spoken) = each_line.split(':',1)
这一句你有两个变量,但却只有一个值,无法赋值给两个变量
你后边的确分割成两部分,而你后边参数是1取得是分割次数,分割后返回的是一个列表,你的赋值表达式只会将列表直接给第一个变量,而第二个变量没有值,那就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 10:00:11 | 显示全部楼层
谢谢解答~~
但是视频中小甲鱼老师的代码就是这样的,,一模一样~他的就没有问题
那我这种情况下,应该怎样让分割后的字符串前半部分给role,后半部分赋给line_spoken呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 10:05:43 | 显示全部楼层
小虾米66 发表于 2017-4-20 10:00
谢谢解答~~
但是视频中小甲鱼老师的代码就是这样的,,一模一样~他的就没有问题
那我这种情况下,应该怎 ...

那你得看下你的文件中是不是用的是中文字符的:,而你代码中使用的是英文字母的:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 10:16:42 | 显示全部楼层
lumber2388779 发表于 2017-4-20 10:05
那你得看下你的文件中是不是用的是中文字符的:,而你代码中使用的是英文字母的:

看了,代码和文件的标点是一致的,都是英文的冒号。另外,我单挑出来一行话分割就没有问题。。。怎么破?

str=('甲:你看得到天上的云吗?')
>>> (role, spoken) = str.split(':',1)
>>> role
'甲'
>>> spoken
'你看得到天上的云吗?'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-20 10:21:17 | 显示全部楼层
小虾米66 发表于 2017-4-20 10:16
看了,代码和文件的标点是一致的,都是英文的冒号。另外,我单挑出来一行话分割就没有问题。。。怎么破? ...

单独调试没问题的话,把每一句的each_line都print出来看一下,看下到哪一句报错,看下那一句尝试单独分割下试下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 11:13:43 | 显示全部楼层
lumber2388779 发表于 2017-4-20 10:21
单独调试没问题的话,把每一句的each_line都print出来看一下,看下到哪一句报错,看下那一句尝试单独分割 ...

嗯嗯,试了下你的方法找到问题了。因为原文档有一行空白的回车键,不符合分割条件,也不符合第一个====的分段条件,所以报错。
非常感谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 23:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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