鱼C论坛

 找回密码
 立即注册
查看: 4632|回复: 43

[已解决]“课时29:一个任务”程序报错求助

[复制链接]
发表于 2019-8-17 18:29:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 c870801 于 2019-8-18 10:51 编辑

仿照例子自己写了个初级程序,结果报错:程序如下
f=open("a.txt")
t=[]
s=[]
count=1
for each_line in f:
    if each_line[:5]!="=====":
        (role,speak)=each_line.split(":",1)
        if role=="师":
            t.append(speak)
        if role=="生":
            s.append(speak)
    else:
        file_name_t="t_"+str(count)+".txt"
        file_name_s="s_"+str(count)+".txt"

        t_file=open(file_name_t,'w')
        s_file=open(file_name_s,'w')

        t_file.writelines(t)
        s_file.writelines(s)

        t_file.close()
        s_file.close()

        t=[]
        s=[]
        count+=1
……
报错信息如下:
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\新建文件夹\file.py", line 7, in <module>
    (role,speak)=each_line.split(":",1)
ValueError: not enough values to unpack (expected 2, got 1)
这句到底有什么问题,我看着和小宇老师的例子一样啊?


附加:
    for each_line in f:#这个为什么能实现一行一行的遍历呢,没明白?
最佳答案
2019-8-18 20:27:56
你之前的报错的原因是,a.txt里有不带冒号的行,(role, line_spoken) = each_line.split(':',1)需要将each_line用冒号分割一次,变成两个字符串,然后分别赋值给role和line_spoken,由于不带冒号的行没法用冒号分割,所以只有一个值,所以程序报错说没有足够的值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-17 18:31:18 | 显示全部楼层
(role,speak)=each_line.split(":",1)#这一句就是实现的分割字符串保存到左侧元组内啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-17 18:31:48 | 显示全部楼层
f=open("a.txt")
t=[]
s=[]
count=1
for each_line in f:
    if each_line[:5]!="=====":
        (role,speak)=each_line.split(":",1)
        if role=="师":
            t.append(speak)
        if role=="生":
            s.append(speak)
    else:
        file_name_t="t_"+str(count)+".txt"
        file_name_s="s_"+str(count)+".txt"

        t_file=open(file_name_t,'w')
        s_file=open(file_name_s,'w')

        t_file.writelines(t)
        s_file.writelines(s)

        t_file.close()
        s_file.close()

        t=[]
        s=[]
        count+=1

把我标红的部分去掉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-17 18:35:25 | 显示全部楼层
第 7 行:

  1. (role,speak)=each_line.split(":",1)
复制代码


改为:

  1. (role,speak)=each_line.split(":",1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-17 18:39:31 | 显示全部楼层
本帖最后由 jackz007 于 2019-8-17 18:41 编辑

    应该是你的  a.txt 文件内容有问题,把它的内容完整贴出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-17 19:43:23 | 显示全部楼层
报错原因应该是没能成功分割字符串,
这一句:(role,speak)=each_line.split("",1)
看一下record文件里的‘:’是中文的还是英文的,我看你的:像是中文的,改成英文的试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 03:11:25 | 显示全部楼层
你a.txt文件中 每行都是*:*的格式吗,看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:26:34 | 显示全部楼层
5584197 发表于 2019-8-17 19:43
报错原因应该是没能成功分割字符串,
这一句:(role,speak)=each_line.split(":",1)
看一下record文件里 ...

我都改成一致的了,英文的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:27:52 | 显示全部楼层
a.txt原文如下(冒号均是英文符号了)
师:老师让你留下来是想找你聊聊,你认为自己平时的表现怎样?

生:(手里拿着篮球,一直在拍,有点不上心。)

师:不管你以前的表现好与坏,老师现在希望你能认真起来,认真的人才是值得尊重的。其实你很聪明,我们高二了,还有一年多时间就高考了,现在努力还不晚,我们还是可以通过自己的努力改变未来的命运。只有认真的付出了,将来才能得到回报。像你现在这样天天打篮球能有什么前途?能打进NBA?只能是身体得到了锻炼,但是光有个好身体,学习不好,前途在哪里?男孩子应该有责任心,首先要对自己负责,才能对其他的事情负责。希望你能成为一个男子汉,成为有用之才,为自己的前途打下良好的基础。

生:这时虽然没有说什么话,但是已经停止了拍球,好像在想写什么。

===================================================
师:假期在家过的怎么样啊?
生:还可以。
师:都在家忙些什么啊?
生:和朋友、同学玩了几天,又找了几张感兴趣的画临摹了几张。
师:哦,是么!画画感觉吃力么?
生:不吃力,画的时候感觉还可以!
师:咱们现在回到学校上课了,要把自己的状态调整过来不要松懈!
生:我明白了,老师!







年X班 学生姓名 XXX、XXX、XX

月X日 谈话地点
班级

科目 XXX











====================================================





师:最近学习怎么样啊?

  生:可以。

  师:可以时什么程度啊?期中考试有进步吗?

  生:进步了,进步了一百名!(排名是按全年级来排的)

  师:真的啊!太好了!这证明你努力了,老师真高兴,因为我的话你在意了!虽然你没有表态,但是老师相信你是个有上进心有理想的人。学习进步了,其他方面也要注意啊!不要总是跟老师作对,其实老师时为你好,你的变化其他老师也会发现的。我会一直默默的为你加油的!继续努力啊!

  生:好的。您放心吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:28:28 | 显示全部楼层
zltzlt 发表于 2019-8-17 18:31
f=open("a.txt")
t=[]
s=[]

这个1的作用不就是一段分隔一次吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:29:05 | 显示全部楼层
jackz007 发表于 2019-8-17 18:39
应该是你的  a.txt 文件内容有问题,把它的内容完整贴出来。

我已贴出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:36:18 | 显示全部楼层
zltzlt 发表于 2019-8-17 18:31
f=open("a.txt")
t=[]
s=[]

我试过了,出同样错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 10:36:58 | 显示全部楼层
  1. f=open("a.txt")
  2. t=[]
  3. s=[]
  4. count=1
  5. for each_line in f:
  6.     if each_line[:5]!="=====" and ':' in f:
  7.         (role,speak)=each_line.split(":",1)
  8.         if role=="师":
  9.             t.append(speak)
  10.         if role=="生":
  11.             s.append(speak)
  12.     elif each_line == '\n':
  13.         pass
  14.     elif each_line[:5]=="=====":
  15.         file_name_t="t_"+str(count)+".txt"
  16.         file_name_s="s_"+str(count)+".txt"

  17.         t_file=open(file_name_t,'w')
  18.         s_file=open(file_name_s,'w')

  19.         t_file.writelines(t)
  20.         s_file.writelines(s)

  21.         t_file.close()
  22.         s_file.close()

  23.         t=[]
  24.         s=[]
  25.         count+=1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:38:30 | 显示全部楼层
htygame 发表于 2019-8-18 03:11
你a.txt文件中 每行都是*:*的格式吗,看看

有的有空行,有的有空格也不行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 10:38:36 | 显示全部楼层
你的 a.txt 文件有问题,我帮你改了一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 10:39:29 | 显示全部楼层
本帖最后由 zltzlt 于 2019-8-18 10:41 编辑

你 a.txt 文件中 不是每行都是 *:* 或 ======== 的格式,所以报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 10:41:29 | 显示全部楼层
c870801 发表于 2019-8-18 10:38
有的有空行,有的有空格也不行?

不行,空行报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 10:42:29 | 显示全部楼层
htygame 发表于 2019-8-18 03:11
你a.txt文件中 每行都是*:*的格式吗,看看

我现在都改成标准对话式的文档了,只分隔出了第一段的师与生的文档
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 10:45:21 | 显示全部楼层
c870801 发表于 2019-8-18 10:42
我现在都改成标准对话式的文档了,只分隔出了第一段的师与生的文档

把空行和其他无关的全部去掉,只留下 *:* 和 =======
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 11:07:28 | 显示全部楼层
zltzlt 发表于 2019-8-18 10:45
把空行和其他无关的全部去掉,只留下 *:* 和 =======

已去掉,可还是报错,但能将第一段分隔出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-25 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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