2017-06-01 58 views
1

我已被分配读取格式化为一小堆电子表格的.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或熊猫或其他东西来处理这个,但我不知道如何。我需要将每个迷你电子表格转换为字典,然后将它们嵌套在另一个字典中。你会如何解决这个问题? (注意:我正在使用Python 2.7编写此代码。)

+0

熊猫文本阅读器允许您跳过“标题”和“页脚”中的行 –

+0

@PaulH您能详细说明吗?我不确定你正在寻找什么。 – user1917407

回答

1

使用Pandas'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 

换句话说,你做单通搞清楚文件格式,然后第二遍阅读DataFrames。