python如何读取具有块结构的文件

python如何读取具有块结构的文件,python,numpy,Python,Numpy,通常,我使用python读取csv文件,其结构如下所示: date1, value1_1, value1_2, value1_3, ... date2, value2_1, value2_2, value2_3, ... ... date1 value1_1, value1_2 value1_3, ... date2 ... 在本例中,一行是一段数据,我只使用numpy.loadtxt()读取它们 但是今天,我的同事给了我一个块结构的文件,它看起来像: date1, value1_1, va

通常,我使用python读取csv文件,其结构如下所示:

date1, value1_1, value1_2, value1_3, ...
date2, value2_1, value2_2, value2_3, ...
...
date1
value1_1, value1_2
value1_3, ...
date2
...
在本例中,一行是一段数据,我只使用numpy.loadtxt()读取它们

但是今天,我的同事给了我一个块结构的文件,它看起来像:

date1, value1_1, value1_2, value1_3, ...
date2, value2_1, value2_2, value2_3, ...
...
date1
value1_1, value1_2
value1_3, ...
date2
...
这让我头疼


有人有什么好的解决办法吗?有没有一个函数我可以用来处理这个文件,或者我必须自己编写一个
读取混乱的文件()

numpy
csv阅读器,如
loadtxt
genfromtxt
接受任何iterable作为输入。通常,它是一个文件名,可以逐行打开和读取,也可以是一个行列表,或者是一次返回一行的生成器

因此,您可以打开文件,逐行读取,将块重新编辑为正常的
csv
行,并将它们传递到
loadtxt

我记得一些例子使用它来读取多个文件(具有相同的列)、跳过行或读取块。另外,示例处理这些行以替换笨拙的分隔符

我经常使用从剪切粘贴示例派生的行列表来演示
loadtxt

我在想这样的事情:

def foo(afile):
    header=None
    for line in afile:
        strings = line.split(delimiter)
        if len(strings)==1:
             header = strings[0]
        else:
            line = delimiter.join([header]+strings)
            yield line

with open(filename) as f:
    A = np.loadtxt(foo(f),....)

在源代码处修复此问题可能更容易,并询问您的同事是否可以给您一个标准的csv格式文件。这些字符串仍然是以行分隔的字符串吗?有什么结构吗?如果没有一个合适的例子来说明这个文件的样子,我们就无法猜测如何解析它。第二个文件是以行分隔的字符串。在csv情况下,每行包含一个完整的数据段,而在第二个文件中,第1、2和3行的组合是一个完整的数据段