【问题标题】:too many values to unpack(expected 3)?太多的值要解压(预期 3)?
【发布时间】:2019-10-05 20:39:30
【问题描述】:

我正在尝试从文本文件中加载一些数据,但不断收到此错误:

def getData(file):
    f = open('N_20_T_10.txt','r')
    x, y, z = [], [], []
    f.readline()
    for line in f:
        xp, yp, zp = line.split(' ')
        x.append(float(xp))
        y.append(float(yp))
        z.append(float(zp))
    f.close()
    return x, y, z
def plotData(inputFile):
    x, y, z = getData(inputFile)
    x = pylab.array(x)
    y = pylab.array(y)
    z = pylab.array(z)
    N = np.linspace(1, 100, 100)
    r = np.sqrt(x**2 + y**2+z**2)
    mean_r = N*r
    data = np.column_stack(N)
    data1 = np.column_stack(mean_r)
    print(data, mean_r)
    #print(N, r)
    np.savetxt('new.txt', list(zip(N, mean_r)), fmt='%.1f', delimiter=",")
    pylab.plot(N, mean_r)
    pylab.xlabel('N')
    pylab.show()
plotData('N_20_T_10.txt.txt')

这是我正在使用的数据。我认为它不断出现可能是因为数据中有一些额外的空格,因为当我使用没有空格的不同文件时它工作得很好。但我不确定。

【问题讨论】:

  • f.readline() 只读取一行。也许你的意思是 f.readlines()。下面的其他答案应该可以解决您的“值太多问题”——即line.strip().split()的用法
  • @DarrylG 似乎第一行是垃圾或标题,并从循环中跳过。
  • @makozaki 你是对的,谢谢

标签: python list


【解决方案1】:

从图片看来,第一个数字之前有一个空格。然后你会得到split(' ')操作的4个元素。请参阅以下示例:

numbers = " 1 2 3"
numbers.split(' ')
# output: ['','1', '2', '3']

您可以通过跳过数组的第一个元素来解决您的问题,如下所示:

numbers.split(' ')[1:]
# output: ['1', '2', '3']

或使用strip():

numbers.strip().split(' ')
# output: ['1', '2', '3']

或者你可以简单地使用split()而不带参数:

numbers.split()
# output: ['1', '2', '3']

所以在你的情况下,下面的代码应该可以工作:

xp, yp, zp = line.spilt()

【讨论】:

  • 在拆分之前使用str.strip()会好得多,而不是切片第一个字符。
【解决方案2】:

我会尝试使用删除每行开头和结尾的所有空格

xp, yp, zp = line.strip().split(' ')

【讨论】:

    【解决方案3】:

    如果这是空白问题,那么您可以使用 split 解决它而不定义分隔符。 Split docs解释:

    如果 sep 未指定或为 None,则使用不同的分割算法 应用:连续空白的运行被视为单个 分隔符...

    例子

    >>> '   1   2   3   '.split()
    ['1', '2', '3']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-19
      • 2019-01-13
      • 2019-12-28
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多