itsuyo林李 发表于 2021-3-1 10:18:41

python 文件操作 报错,ValueError: not enough values to unpack (expected 2, go...


File "D:\python\小甲鱼系列\文件处理.py", line 13, in <module>
    (person,spoken)=each_line.split(':',1)

ValueError: not enough values to unpack (expected 2, got 1)

itsuyo林李 发表于 2021-3-1 10:20:00

有人知道这个错误的,请告知一下,谢谢

jackz007 发表于 2021-3-1 11:24:27

本帖最后由 jackz007 于 2021-3-1 11:49 编辑

      这个代码不允许在文件中有空行存在。
      试试这个代码
girl , boy , count = [] , [] , 1
f = open('d:\\report.txt')
report = list(f)
f . close()
if report[-1][:6] != '######':                                    # 判断文件最后一行是不是由'######'构成的分隔行
    report . append('######')                                     # 如果不是,那就添加一行,因为这个代码要遇到分隔行才会写文件
for each_line in report:
    if each_line . strip():                                       # 过滤空文本行
      if each_line[:6] != '######':                           # 如果当前行是文本行
            if ':' in each_line:                                  # 判断当前行是否可分割
                (person , spoken) = each_line . split(':' , 1)    # 只对可分割行进行分割
                if person == '小甲鱼':
                  boy . append(spoken)
                else:
                  girl . append(spoken)
            else:
                print(each_line)                                  # 把无法分割的行显示出来
      else:
            file_name_boy = 'boy_' + str(count) + '.txt'          # 输出文件与源代码同目录
            file_name_girl = 'girl_' + str(count) + '.txt'      # 输出文件与源代码同目录
            with open(file_name_boy , 'w') as boy_file:
                boy_file . writelines(boy)
            with open(file_name_girl , 'w') as girl_file:
                girl_file . writelines(girl)   
            count += 1
f . close()

代码小白liu 发表于 2021-3-1 11:33:58

没有足够的结果赋值给role,line_spoken两个变量,所以报错。
建议你把代码复制出来看看

itsuyo林李 发表于 2021-3-1 12:26:16

jackz007 发表于 2021-3-1 11:24
这个代码不允许在文件中有空行存在。
      试试这个代码

代码完全是ok的
也可以输出一个模块后,boy girl初始化一下。谢谢jack~

itsuyo林李 发表于 2021-3-1 13:20:52

jackz007 发表于 2021-3-1 11:24
这个代码不允许在文件中有空行存在。
      试试这个代码

不过截图里面的错误,到底是什么原因导致的,知道吗?

jackz007 发表于 2021-3-1 14:15:23

本帖最后由 jackz007 于 2021-3-1 14:16 编辑

itsuyo林李 发表于 2021-3-1 13:20
不过截图里面的错误,到底是什么原因导致的,知道吗?

for each_line in f:
    (person , spoken) = each_line . split(':' , 1)
    if spoken[:6] != "######"
   这个代码有严重的逻辑错误!
   读到一行文件内容的时候,首先应该判定这是一个文本行还是分隔行,只有是文本行的情况下,才能根据 ':' 对文本内容进行分割,你在未进行任何判定的情况下,就认定每一行都是文本行,进而要根据 ':' 对内容进行分割,如果当前行确实是文本行还可以,如果不是,那么,就无法根据 ':' 分出两个字符串出来,这就是报错的原因。
      循环中的两个语句应该颠倒一下顺序:
for each_line in f:
    if spoken[:6] != "######"
      (person , spoken) = each_line . split(':' , 1)
      此外,空行既不是文本行,也不是分隔行,却要被认定为文本行,同样无法根据 ':' 分出两个字符串,同样也要报错,所以,必须把文件 'D:\\report.txt' 中的所有空行都删除掉。

itsuyo林李 发表于 2021-3-2 14:17:35

jackz007 发表于 2021-3-1 14:15
这个代码有严重的逻辑错误!
   读到一行文件内容的时候,首先应该判定这是一个文本行还是分 ...

谢谢~ 太详细的解析了,我tm真是太蠢了{:5_109:}

剑廿三 发表于 2021-4-4 11:45:26

jackz007 发表于 2021-3-1 14:15
这个代码有严重的逻辑错误!
   读到一行文件内容的时候,首先应该判定这是一个文本行还是分 ...

感谢大佬!
我照着小甲鱼写的程序运行,在for each_line in f:,那里出现gbk的解码错误
终于解决的。{:5_106:}

jackz007 发表于 2021-4-4 11:59:38

本帖最后由 jackz007 于 2021-4-4 12:01 编辑

剑廿三 发表于 2021-4-4 11:45
感谢大佬!
我照着小甲鱼写的程序运行,在for each_line in f:,那里出现gbk的解码错误
终于解决的。 ...

      如果遇到 GBK 的解码错误,那就改一下打开文件的语句
      假如原来的语句是这样:
f = open('d:\\report.txt')
      那就改成下面这样(就是为 open() 添加 encoding = 'UTF-8' 选项)试试
f = open('d:\\report.txt' , encoding = 'UTF-8')

剑廿三 发表于 2021-4-4 14:39:46

jackz007 发表于 2021-4-4 11:59
如果遇到 GBK 的解码错误,那就改一下打开文件的语句
      假如原来的语句是这样:



之前碰到了gbk错误,在网上搜了下解决的方法,说是win10的问题,需要修改编码方式
我试着修改了encoding=utf-8,gbk不报了,ValueError报错了,就照着大佬你给的方法,
试着把文档中的空格全排除,就好了

nicepython 发表于 2021-4-20 06:26:12

f = open("record.txt", 'rb')
boy = []
girl = []
count = 1

for each_line in f:
    if each_line[:5] != "======":
      if ':' in each_line.decode():
            (role, line_spoken) = each_line.decode().split(':', 1)
            if role == "比企谷八幡":
                boy.append(line_spoken)
            if role == "雪之下雪乃":
                girl.append(line_spoken)
      else:
            print(each_line)
    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()

我照着改了一下,但是出现了新的问题,就是count不会加,一直是1,只产生了一两个文件boy1,girl1
页: [1]
查看完整版本: python 文件操作 报错,ValueError: not enough values to unpack (expected 2, go...