python - 我应该如何阅读堆积的电子表格?

标签 python python-2.7 csv pandas

我被分配读取一个 .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/

相关文章:

java - 将 Curses 用于具有许多功能的详细应用程序

python - 使用 NLTK 在不完整的句子中查找主题

python sqlite3,我必须多久提交一次?

python-2.7 - 如何检查是否/使用了哪个 matplotlibrc

python - 从 JSON 写入 CSV 时出现 UnicodeEncodeError

linux - subprocess.Popen : does not retun complete output , 当通过 crontab 运行时

python - 在 Python 中使用访问器的正确方法?

python - 如何输出多行csv?

java - 在java中合并多个csv文件

python - 如何使用 pandas 读取带有逗号的数字的 *.csv 文件?