我应该如何阅读堆叠的电子表格?

2024-03-28 22:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我被指派读取一个.HDR文件,该文件被格式化为一堆小电子表格。格式如下:

* Block title 1
* column 1 | column 2 | column 3 | ... | column n
data 1,1 | data 1,2 | data 1,3 | ... | data 1,n
data 2,1 | data 2,2 | data 2,3 | ... | data 2,n
data 3,1 | data 3,2 | data 3,3 | ... | data 3,n
   ...   |    ...   |    ...   | ... |    ...
data n,1 | data n,2 | data n,3 | ... | data n,n
*
* Block title 2
* column 1 | column 2 | column 3 | ... | column n
data 1,1 | data 1,2 | data 1,3 | ... | data 1,n
data 2,1 | data 2,2 | data 2,3 | ... | data 2,n
data 3,1 | data 3,2 | data 3,3 | ... | data 3,n
   ...   |    ...   |    ...   | ... |    ...
data n,1 | data n,2 | data n,3 | ... | data n,n
*

请注意,每个块中的列具有不同的名称

这通常是格式,但也有例外。有时数据的格式如下所示:

* Block title 1
* column 1 | column 2 | column 3 | ... | column n
data 1,1 | data 1,2 | data 1,3 | ... | data 1,n
data 2,1 | data 2,2 | data 2,3 | ... | data 2,n
data 3,1 | data 3,2 | data 3,3 | ... | data 3,n
   ...   |    ...   |    ...   | ... |    ...
data n,1 | data n,2 | data n,3 | ... | data n,n
* Block title 1 (this is the same title as above)
data 1,1 | data 1,2 | data 1,3 | ... | data 1,n
data 2,1 | data 2,2 | data 2,3 | ... | data 2,n
data 3,1 | data 3,2 | data 3,3 | ... | data 3,n
   ...   |    ...   |    ...   | ... |    ...
data n,1 | data n,2 | data n,3 | ... | data n,n
*

请注意,没有列名称

理想情况下,我希望使用csv.Dictreader或pandas或其他东西来处理这个问题,但我不确定如何处理。我需要将每个迷你电子表格转换成一个字典,然后将它们嵌套到另一个字典中。你将如何处理这个问题(注意:我是用Python 2.7编写的。)


Tags: 文件the数据名称data字典hdrtitle
1条回答
网友
1楼 · 发布于 2024-03-28 22:39:41

使用“pd.read_table()”读取第一列(如果有的话,直到|)。然后使用类似的方法查找分隔符行:

seps = np.where(df.str.startswith('*'))

现在您有了一个行索引数组,其中存在分隔符。接下来,自己打开文件,逐段阅读,大致如下:

skiprows=0
with open(path) as rf:
    for sep in seps:
        pd.read_table(rf, nrows=sep-skiprows, skiprows=skiprows)
        skiprows += sep

换言之,您只需执行一次过程来确定文件布局,然后执行第二次过程来读取数据帧

相关问题 更多 >