我试图在Python中拆分文本文件,但是我收到以下错误:
ValueError: need more than 1 value to unpack
我的代码:
for line in lines:
x, y, e, r, t=line.split()
return x, y, e, r, t
文本文件的格式为
x y e r t
但有些行缺少数字或字母,例如
x e r t
x y r t
所以我猜这就是我收到错误的原因,但我无法找到解决问题的方法。 是否可以将空格计为变量?
答案 0 :(得分:2)
>>> 'x e r t'.replace(' ', ' _').split(' ')
['x', '_', 'e', 'r', 't']
>>> 'x y r t'.replace(' ', ' _').split(' ')
['x', 'y', '_', 'r', 't']
>>> 'x r t'.replace(' ', ' _').split(' ')
['x', '_', '_', 'r', 't']
然后只检查发出缺失值的特殊值'_'
。
答案 1 :(得分:2)
这个答案假定行是缺少字段,@ Poke的回答假设字段已被空格替换(在其他字段之间留下三个空格)。
.split()
上的文档告诉您需要了解的所有内容。
如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随,则结果将在开头或结尾处不包含空字符串空白。因此,将空字符串或仅由空格组成的字符串拆分为无分隔符将返回[]。
因此,只需在sep=' '
的调用中指定.split()
,即:
line.split(' ')
这样分隔符恰好是一个空格。
>>> x, y, e, r, t = "x y e r t".split(' ')
>>> print((x, y, e, r, t))
('x', 'y', 'e', 'r', 't')
>>> x, y, e, r, t = "x e r t".split(' ')
>>> print((x, y, e, r, t))
('x', '', 'e', 'r', 't')
>>> x, y, e, r, t = "x y r t".split(' ')
>>> print((x, y, e, r, t))
('x', 'y', '', 'r', 't')
答案 2 :(得分:1)
假设每个字符之间的空格数仅为1,并且其间有一个额外的空格表示空变量。我认为您最好的选择是不使用line.split()
函数,而是移动line
中的每个字符并确定您需要的值。
这样的代码 -
lst = []
for line in lines:
for i in xrange(0,len(line),2):
if line[i] == ' ':
lst.append(' ') # or whatever you use for empty variables
else:
lst.append(line[i])
return lst
然后,您可以从调用上述功能的
中解压缩列表