太多值无法解压缩(应为4)

2024-09-30 22:19:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段基本代码,只是想把一个文件分成4个列表。txt文件的格式如代码下面所示,每个数字用空格分隔。出现的错误是“ValueError:太多的值无法解压缩(应为4)”。在

file = open("myfreefall.txt","r")
for line in file:
     if not line.startswith('#'):
         v,a,t,y= line.split(' ')


#v  a  t  y
-0.10 -9.81 0.01 5500.00
-0.20 -9.81 0.02 5500.00
-0.29 -9.81 0.03 5500.00
-0.39 -9.81 0.04 5499.99
-0.49 -9.81 0.05 5499.99
-0.59 -9.81 0.06 5499.99
-0.69 -9.81 0.07 5499.98
-0.78 -9.81 0.08 5499.97
...

不过,我将代码改为如下所示,以测试预期的变量数量,错误更改为“没有足够的值来解压缩(预期为5,得到4)”。这没有意义,因为现在代码正在解包我想要的四个变量!如有任何解决方案/建议,我们将不胜感激。在

^{pr2}$

Tags: 文件代码intxt列表for格式错误
2条回答

正如评论者建议的那样,试着打印这一行来查看真正导致问题的那一行(但是一定要在line.split之前插入打印)。在

最有可能的问题是末尾有一个空行,它被读作换行符。如果是这样,最简单的解决方案可能是在If语句中附加另一个条件:

file = open("myfreefall.txt","r")
for line in file:
     if not line.startswith('#') and line != '\n':
     # or, more robust:
     if not line.startswith('#') and len(line) == 4:
         v,a,t,y= line.split(' ')

或者尝试一下/除了:

^{2}$

第二个if语句更健壮,因为它只会在有四个列表项要处理的情况下尝试提取四个变量。任何其他情况(从中提取更多或更少的条目)将被忽略。您可以根据您的需要对其进行更多的调整,例如,如果您还想允许阅读较长的行,可以将其更改为“len(line)>=4”。在

老实说,我想不出try/except变体有什么特别的优势,但是既然我刚写出来,我还是把它放在里面吧。事实上,它可能有点过于健壮,因为它也会跳过那些由于其他而导致值错误的行,而不是要处理的条目太少。在

你所描述的第二次尝试失败是完全有道理的。 您将告诉python将一个由四个条目组成的列表分成五个变量,v、a、t、y和test。这就是错误所指的,当它说“预期5,得到4”。您的错误行为可能会改变,因为代码现在失败得更快。在它为所有行工作之前,除了最后一行,只有一个列表条目可以使用。当你改变为五个变量时,第一行就出现了一个错误,这里有四个条目,但现在你要求的是五个。在

第二个错误是正确的,因为您按照这一行解压5个值:

v,a,t,y,test = line.split(' ')
#       ^^^^

由于每行拆分时将返回4个元素,因此第5个值不存在,因此出现错误。请注意,以这种方式进行解包从长远来看可能会有问题,尤其是对于许多元素。对分割线的长度做一个明确的检查是值得的。在

对于原始问题,尝试使用^ {CD1>},因为这会自动分割空白区——也就是说,该空间可能是一个制表符,或者是空白Unicode字符之一(参见:http://jkorpela.fi/chars/spaces.html)。在

或者,可以在行中使用正则表达式,以简化文本的解析:

^{2}$

相关问题 更多 >