读取可能只有一行或一列的 table (python)

reading a table that might have a single row or column (python)

我正在使用 genfromtxt 从 csv 文件中提取 table:

myTable = numpy.genfromtxt("myFile.csv", skip_header=1, delimiter=",", dtype=float)

我事先不知道 table 的大小,它可能包含单行或单列。我希望得到一个二维数组。这适用于大多数情况,但如果只有一行或一列,我会得到一个一维数组,这会扰乱我的执行。

一个相关的问题是包含“1,2”的文件和包含“1\n2”的文件会产生相同的输出 [1 2],而我希望第一个的输出是是 [[1 2]] 和第二个 [[1][2]]

有没有办法在 genfromtxt 中指示预期输出的维度?或者,是否有不同的实用程序用于从文件中读取 tables?

使用 readlines() 逐行(行)进入文件。 并在每一行中,使用 column=len(row.split(';')) 查找每行的列数。

for row in file.readlines():
     column=len(row.split(';'))

现在您可以提取您想要的任何类型的信息

这是我编写的代码,可能会对您有所帮助我也是新手,所以您可能会找到比这个更好的解决方案

import csv
datafile = open(r'C:\Users\Admin\Downloads\a.csv', 'r')
datareader = csv.reader(datafile, delimiter=';')
data = []
for row in datareader:
    print(row)
    for x in row :
        try:
            ls = x.split(",")
            data.append(ls)   
        except:
            data.append(x)  
print (data)

您可以使用 raise 语句将文件加载包装在 try..except 块中,这样当加载的 table 与所需尺寸不匹配时,您会收到一条错误消息。

import numpy

try:
    myTable = numpy.genfromtxt(("myFile.csv", skip_header=1, delimiter=",", dtype=float)
    if myTable.shape[0] == 1 or myTable.shape[1] == 1:
        raise IndexError("The imported table has 2 or more dimensions!") 
except:
    raise

这样,每当您尝试将 table 加载到小于 2 维的内存中时,您都会得到一个 IndexError,其中包含您在 raise 语句中指定的错误消息.现在您可以将该块包装到一个函数中,并尝试从该函数中加载 table 。此外,我建议创建一个 pandas 数据框,因为它具有多功能且易于操作数据的可能性。