Pugss_风 发表于 2020-7-10 17:16:45

零基础入门学习python第29课“一个任务”求助

各位大佬,小弟按照课件中程序编辑如下:
f = open('record.txt')

boy = []
girl = []
count = 1

for each_line in f:
    if each_line != '======':
      # 这里进行字符串分割操作
      (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

f.close()

结果在执行时有如下报错:
Traceback (most recent call last):
File "E:/python/test_1.py", line 10, in <module>
    (role, line_spoken) = each_line.split(' : ', 1)
ValueError: not enough values to unpack (expected 2, got 1)

请问主要是什么原因引发的,以及如何解决呢?

Twilight6 发表于 2020-7-10 17:18:27

本帖最后由 Twilight6 于 2020-7-10 17:21 编辑


if each_line != '======':这里错了 需要列表切片前6 个 ,因为你后面判断的是 6 个等号

否则你 for 循环每次都是读取一行的,会把一行内所有的 = 号都读取出来,导致 if 条件始终成立

而 if 条件成立了 通过 split 切割发现没有 :冒号,所以只返回一个值,而你设置了两个参数来接收导致报错


f = open('record.txt')

boy = []
girl = []
count = 1

for each_line in f:
    if each_line[:6] != '======':
      # 这里进行字符串分割操作
      (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

f.close()

Pugss_风 发表于 2020-7-10 17:21:59

Twilight6 发表于 2020-7-10 17:18
if each_line != '======':这里错了 需要列表切片前6 个 ,因为你后面判断的是 6 个等号

否则你 for ...

您好,还是不行哦,依然是split函数那里提示缺少参数。

飞刀 发表于 2020-7-10 17:22:17

还没学到这一步,{:5_109:}

Twilight6 发表于 2020-7-10 17:25:01

Pugss_风 发表于 2020-7-10 17:21
您好,还是不行哦,依然是split函数那里提示缺少参数。


那你把 split 切片的冒号改成英文的,而且不能有空格,你有空格肯定切片会失败

Twilight6 发表于 2020-7-10 17:26:11

Pugss_风 发表于 2020-7-10 17:21
您好,还是不行哦,依然是split函数那里提示缺少参数。

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

Pugss_风 发表于 2020-7-10 17:26:40

Twilight6 发表于 2020-7-10 17:25
那你把 split 切片的冒号改成英文的,而且不能有空格,你有空格肯定切片会失败

找到原因了,感谢感谢

Pugss_风 发表于 2020-7-10 17:29:14

程序中有两个问题:
1、if each_line != '======':条件句中,未设定字符串长度,应改为:if each_line[:6] != '======':
2、split函数中的" : "包含了空格,所以导致无法完成字符串分割的操作,应去掉空格。此外还应注意是英文冒号。

Twilight6 发表于 2020-7-10 17:29:47

Pugss_风 发表于 2020-7-10 17:29
程序中有两个问题:
1、if each_line != '======':条件句中,未设定字符串长度,应改为:if each_line[:6] ...


嗯 是的
页: [1]
查看完整版本: 零基础入门学习python第29课“一个任务”求助