用开放空格拆分txt文件

时间:2015-06-14 15:02:44

标签: python

我试图在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

所以我猜这就是我收到错误的原因,但我无法找到解决问题的方法。 是否可以将空格计为变量?

3 个答案:

答案 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

然后,您可以从调用上述功能的

中解压缩列表