Python ascii.read 制表符 (?) 分隔符
Python ascii.read tab(?) delimiters
我正在尝试使用 ascii.read 扫描大量表格数据文件。列标题似乎没有 self-consistent 分隔符。每列 header 之间有 2 到 7 space 的范围。这些文件看起来像这样:
K WAVELN NEFF GEOM ALB BOND/QFIT BOND/GEOM Q-FITTED
1 0.3000000 0.0556723 0.0000000 0.0000000 2.1435934 2.0582306
[...]
[...]
我最初怀疑我可以处理它们的标签,但事实并非如此:
raw = (ascii.read('filename', delimiter='\t')
将读取文件,但 returns 只有一个非常无用的单列数据。
现在,这在正常情况下不会成为问题 - 一个简单的
delimter='\s'
本来可以做到的。然而令我沮丧的是,有一列名为 "GEOM ALB" - 中间有一个 space。这弄乱了分隔符,因为它认为这是两列 headers,而不是一列:
raw = (ascii.read('filename',delimiter='\s')
InconsistentTableError: Number of header columns (8) inconsistent with data columns (7) at data line 0
这可以通过将相关文件中的 "GEOM ALB" header 替换为 "GEOM_ALB" 来解决,但是我宁愿避免花时间编写脚本来执行此操作,特别是如果有更简单和优雅的解决方案。
我在这里找到了解决我的问题的方法。通过将 ascii.read 调用为
raw = (ascii.read('filename',guess=False,header_start=None,data_start=2,names=('K','WAVELN','NEFF','GEOM ALB','BOND/QFIT','BOND/GEOM','Q-FITTED')))
我能够绕过 ascii.read 查找和应用 header 名称并自己定义它们的尝试。关键当然是
header_start=None
告诉 ascii.read 没有 header。
我正在尝试使用 ascii.read 扫描大量表格数据文件。列标题似乎没有 self-consistent 分隔符。每列 header 之间有 2 到 7 space 的范围。这些文件看起来像这样:
K WAVELN NEFF GEOM ALB BOND/QFIT BOND/GEOM Q-FITTED
1 0.3000000 0.0556723 0.0000000 0.0000000 2.1435934 2.0582306
[...]
[...]
我最初怀疑我可以处理它们的标签,但事实并非如此:
raw = (ascii.read('filename', delimiter='\t')
将读取文件,但 returns 只有一个非常无用的单列数据。
现在,这在正常情况下不会成为问题 - 一个简单的
delimter='\s'
本来可以做到的。然而令我沮丧的是,有一列名为 "GEOM ALB" - 中间有一个 space。这弄乱了分隔符,因为它认为这是两列 headers,而不是一列:
raw = (ascii.read('filename',delimiter='\s')
InconsistentTableError: Number of header columns (8) inconsistent with data columns (7) at data line 0
这可以通过将相关文件中的 "GEOM ALB" header 替换为 "GEOM_ALB" 来解决,但是我宁愿避免花时间编写脚本来执行此操作,特别是如果有更简单和优雅的解决方案。
我在这里找到了解决我的问题的方法。通过将 ascii.read 调用为
raw = (ascii.read('filename',guess=False,header_start=None,data_start=2,names=('K','WAVELN','NEFF','GEOM ALB','BOND/QFIT','BOND/GEOM','Q-FITTED')))
我能够绕过 ascii.read 查找和应用 header 名称并自己定义它们的尝试。关键当然是
header_start=None
告诉 ascii.read 没有 header。