python - 将文件元素读入 3 个不同的数组

标签 python arrays csv file-io

我有一个以 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:太多值无法解压”的错误

我已经进行了大量的谷歌搜索,但似乎没有任何解决方案必须将文件中的每个元素读入单独的数组。

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

谢谢!

最佳答案

编辑:如果您的数据实际上并未分为 3 元素行(而是一长串空格分隔的值列表),您可以使用带有 stride 的 python 列表切片来实现此目的更容易:

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)

关于python - 将文件元素读入 3 个不同的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353450/

相关文章:

python - 访问网络服务

python - 为什么 os.path.exists() 会阻止 Windows 命名管道连接?

Python 输入验证大于零的整数

java - libGDX:如何从数组中删除特定值

java - 在 java 的多个方法中使用的数组副本

python - DictReader 的类型错误

windows - 使用 -replace 从 csv 中的单元格中删除带有特殊字符的字符串

java - 使用java将MongoDB数据转换为csv

python - 将重复的行转换为带有标题的多列

ios - 使用基于谓词键的另一个数组的谓词过滤数组