我被分配读取一个 .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 中的列具有不同的名称。
这是通常的格式,但也有异常(exception)。有时数据的格式如下:
* 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 编写的。)
最佳答案
使用 Pandas 的 pd.read_table()
读取第一列(直到 |
如果有的话)。然后使用类似的方法来查找分隔行:
seps = np.where(df.str.startswith('*'))
现在您有了一个存在分隔符的行索引数组。接下来,自己打开文件,一 block 一 block 地读,大致是这样的:
skiprows=0
with open(path) as rf:
for sep in seps:
pd.read_table(rf, nrows=sep-skiprows, skiprows=skiprows)
skiprows += sep
换句话说,您只需执行一次即可确定文件布局,然后再执行第二次来读取数据帧。
关于python - 我应该如何阅读堆积的电子表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311895/