split()函数,这不是我的问题吧?我照着案例写的呀
在做小甲鱼老师第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)
请问这是什么问题呀?我就是按照案例写的呀 本帖最后由 jackz007 于 2020-11-23 10:09 编辑
(role,line_spoken) = each_line.split(':',1)
错误的原因是没有找到 split() 方法中给定的分隔符,红色的冒号是中文的,改西文的试试。 没有足够的值取出,期望2个,得到1个,问题已经说明了,你each_line.split(":",1)只得到了一个值,要么查看你的each_line,要么查看":"是否正确 jackz007 发表于 2020-11-23 10:06
(role,line_spoken) = each_line.split(':',1)
错误的原因是没有找到 split() 方法中给定的分隔符 ...
但我txt文档里也是中文的呀,改成西文的也同样报错 本帖最后由 jackz007 于 2020-11-23 10:21 编辑
CarterZhang 发表于 2020-11-23 10:12
但我txt文档里也是中文的呀,改成西文的也同样报错
这句代码要求 each_line 也就是文件中的每一行必须至少要有一个中文分号存在,否则,就会出错。看看你的文件,是不是每一行都符合这个要求?特别是,不允许有任何的空行存在。 各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我看一下:
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这一行报错。
还请大佬们解答一下! CarterZhang 发表于 2020-11-23 10:22
各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我 ...
解释器报错时都是大约上下文,当然也包含精准定位 分割前应该先判断一下。这一句
(role,line_spoken) = each_line.split(':',1)
改为这样试试
if':' in each_line :
(role,line_spoken) = each_line.split(':',1)
当然,后面所有涉及 role 以及 line_spoken 的文件操作也要同时纳入同一个 if 的缩进 CarterZhang 发表于 2020-11-23 10:22
各位答主好,目前程序已经能运行,也找到了出错的原因,但是出错的原因让我很费解,大家如果方便,麻烦帮我 ...
你现在运行正常了?
那改回
if each_line[:5] != '=====':
试试?
我测试这个地方没有问题的
附源码
f = open('record.txt')
boy = []
girl = []
count = 1
for each_line in f:
if each_line[:5] != '=====':
(role,line_spoken) = each_line.split(':',1)
if role == '小甲鱼':
boy.append(line_spoken)
if role == '小客服':
girl.append(line_spoken)
else:
file_name_boy = 'boy_'+str(count)+'.txt'
file_name_girl = 'girl_'+str(count)+'.txt'
boy_file = open(file_name_boy,'w')
girl_file = open(file_name_girl,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
boy = []
girl = []
count += 1
file_name_boy = 'boy_'+str(count)+'.txt'
file_name_girl = 'girl_'+str(count)+'.txt'
boy_file = open(file_name_boy,'w')
girl_file = open(file_name_girl,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
f.close()
逃兵 发表于 2020-11-23 10:42
你现在运行正常了?
那改回
答主您好,我说错了。这是相关的几行代码,出错之前,if each_line[:5] != '====='
当把5改为6之后,程序就可以了。
我之前输入的是if each_line[:5] != "======"
6个等号,问题应该是出在这。
那大佬能解释一下,明明是if这一行错了,为什么报错在下一行呢? CarterZhang 发表于 2020-11-24 10:40
答主您好,我说错了。
我之前输入的是if each_line[:5] != "======"
6个等号,问题应该是出在这。
你输入错误并没有影响到if的语句,语法上是没错的
each_line[:5] != '======' 一直成立,能够运行
所以这一行不会报错
但是你输入错误会导致逻辑上的错误
导致你筛选出来的each_line不是想要的内容
在切割each_line时引发错误 这个和编辑器有关系,如果你用的是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) jackz007 发表于 2020-11-23 10:06
(role,line_spoken) = each_line.split(':',1)
错误的原因是没有找到 split() 方法中给定的分隔符 ...
感谢,原来是这个原因,真大无语事件
页:
[1]