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)
有人知道这个错误的,请告知一下,谢谢 本帖最后由 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() 没有足够的结果赋值给role,line_spoken两个变量,所以报错。
建议你把代码复制出来看看 jackz007 发表于 2021-3-1 11:24
这个代码不允许在文件中有空行存在。
试试这个代码
代码完全是ok的
也可以输出一个模块后,boy girl初始化一下。谢谢jack~ jackz007 发表于 2021-3-1 11:24
这个代码不允许在文件中有空行存在。
试试这个代码
不过截图里面的错误,到底是什么原因导致的,知道吗? 本帖最后由 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' 中的所有空行都删除掉。 jackz007 发表于 2021-3-1 14:15
这个代码有严重的逻辑错误!
读到一行文件内容的时候,首先应该判定这是一个文本行还是分 ...
谢谢~ 太详细的解析了,我tm真是太蠢了{:5_109:} jackz007 发表于 2021-3-1 14:15
这个代码有严重的逻辑错误!
读到一行文件内容的时候,首先应该判定这是一个文本行还是分 ...
感谢大佬!
我照着小甲鱼写的程序运行,在for each_line in f:,那里出现gbk的解码错误
终于解决的。{:5_106:} 本帖最后由 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')
jackz007 发表于 2021-4-4 11:59
如果遇到 GBK 的解码错误,那就改一下打开文件的语句
假如原来的语句是这样:
之前碰到了gbk错误,在网上搜了下解决的方法,说是win10的问题,需要修改编码方式
我试着修改了encoding=utf-8,gbk不报了,ValueError报错了,就照着大佬你给的方法,
试着把文档中的空格全排除,就好了 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]