鱼C论坛

 找回密码
 立即注册
查看: 3199|回复: 11

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

[复制链接]
发表于 2021-3-1 10:18:41 | 显示全部楼层 |阅读模式

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

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

x

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

ValueError: not enough values to unpack (expected 2, got 1)
20210301.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-1 10:20:00 | 显示全部楼层
有人知道这个错误的,请告知一下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-1 11:33:58 | 显示全部楼层
没有足够的结果赋值给role,line_spoken两个变量,所以报错。
建议你把代码复制出来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-1 12:26:16 | 显示全部楼层
jackz007 发表于 2021-3-1 11:24
这个代码不允许在文件中有空行存在。
      试试这个代码

代码完全是ok的
也可以输出一个模块后,boy girl  初始化一下。  谢谢jack~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-1 13:20:52 | 显示全部楼层
jackz007 发表于 2021-3-1 11:24
这个代码不允许在文件中有空行存在。
      试试这个代码

不过截图里面的错误,到底是什么原因导致的,知道吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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' 中的所有空行都删除掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢~ 太详细的解析了,我tm真是太蠢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢大佬!
我照着小甲鱼写的程序运行,在for each_line in f:  ,那里出现gbk的解码错误
终于解决的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-4 14:39:46 | 显示全部楼层
jackz007 发表于 2021-4-4 11:59
如果遇到 GBK 的解码错误,那就改一下打开文件的语句
        假如原来的语句是这样:

之前碰到了gbk错误,在网上搜了下解决的方法,说是win10的问题,需要修改编码方式
我试着修改了encoding=utf-8,gbk不报了,ValueError报错了,就照着大佬你给的方法,
试着把文档中的空格全排除,就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-9 02:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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