【问题标题】:Read file elements into 3 different arrays将文件元素读入 3 个不同的数组
【发布时间】:2014-04-16 16:50:03
【问题描述】:

我有一个用 x、y、x 值分隔的文件。我需要可视化数据,所以我想我需要将文件读入 3 个单独的数组(X、Y、Z)然后绘制它们。如何将文件读入 3 个单独的数组中,到目前为止我有这个,它删除了每行末尾的空白元素。

def fread(f=None):
    """Reads in test and training CSVs."""
    X = []
    Y = []
    Z = []

    if (f==None):
        print("No file given to read, exiting...")
        sys.exit(1)

    read = csv.reader(open(f,'r'),delimiter = ' ')
    for line in read:
        line = line[:-1]

我尝试添加如下内容:

for x,y,z in line:
    X.append(x)
    Y.append(y)
    Z.append(z)

但我收到类似“ValueError: too many values to unpack”之类的错误

我已经做了很多谷歌搜索,但似乎没有什么可以解决必须将文件中的每个元素读入单独的数组的问题。

我应该添加我的数据没有很好地排序到行/列中,它看起来像这样 “107745590026 2 0.02934046648 0.01023879368 3.331810236 2 0.02727724425 0.07867902517 3.319272757 2 0.01784882881”......

谢谢!

【问题讨论】:

  • 您的行包含三个以上的项目,所以这样的事情会失败:a, b, c = [1, 2, 3, 4]

标签: python arrays csv file-io


【解决方案1】:

编辑:如果您的数据实际上没有分成 3 元素行(而是一个以空格分隔的长值列表),您可以使用 python 列表切片和 stride 来实现更简单:

X = read[::3]
Y = read[1::3]
Z = read[2::3]

此错误可能是因为read 中的某些行包含三个以上以空格分隔的值。您的问题尚不清楚在这些情况下您到底想做什么。如果您使用的是 python 3,您可以将一行的第一个元素放入X,第二个放入Y,并将该行的所有其余部分放入Z,如下所示:

for x, y, *z in line:
    X.append(x)
    Y.append(y)
    for elem in z:
        Z.append(elem)

如果你不使用 python 3,你可以用稍微冗长的方式执行相同的基本逻辑:

for i, elem in line:
    if i == 0:
        X.append(elem)
    elif i == 1:
        Y.append(elem)
    else:
        Z.append(elem)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2012-11-28
    相关资源
    最近更新 更多