如何使用 Astropy ascii table reader 跳过行尾注释?
How to skip end of line comments with Astropy ascii table reader?
我想将包含行尾注释的 ascii 文件读入 Astropy table。像这样:
a | b
1 | 2
3 | 4 # this is a comment
# another comment
5 | 6
如图所示here,这不是我想要的:
Table.read(filename, format='ascii.csv', delimiter='|', comment='\s*#')
我必须将哪些选项传递给 Table.read
才能完成这项工作?
没有执行此操作的内置方法,但只需几行自定义代码即可。基本思想是创建 CSV reader 的子 class,在其中用自己的数据 class 覆盖 data_class = CsvData
,它本身是 class 的子class =12=]。在您的 Data subclass 中覆盖 process_lines
方法来执行自定义注释行处理。查看 core.py
中的 BaseData
class 以查看基线 process_lines
行为。
from astropy.io.ascii.basic import Csv, CsvData
class CsvCommentData(CsvData):
comment = '#' # regular expression not allowed for this reader
def _strip_trailing_comments(self, lines):
for line in lines:
index = line.rfind(self.comment)
if index >= 0:
line = line[:index]
yield line
def process_lines(self, lines):
return super(CsvCommentData, self).process_lines(self._strip_trailing_comments(lines))
class CsvComment(Csv):
_format_name = 'csv_comment'
_io_registry_can_write = True
_description = 'Comma-separated-values with trailing comments allowed'
data_class = CsvCommentData
我想将包含行尾注释的 ascii 文件读入 Astropy table。像这样:
a | b
1 | 2
3 | 4 # this is a comment
# another comment
5 | 6
如图所示here,这不是我想要的:
Table.read(filename, format='ascii.csv', delimiter='|', comment='\s*#')
我必须将哪些选项传递给 Table.read
才能完成这项工作?
没有执行此操作的内置方法,但只需几行自定义代码即可。基本思想是创建 CSV reader 的子 class,在其中用自己的数据 class 覆盖 data_class = CsvData
,它本身是 class 的子class =12=]。在您的 Data subclass 中覆盖 process_lines
方法来执行自定义注释行处理。查看 core.py
中的 BaseData
class 以查看基线 process_lines
行为。
from astropy.io.ascii.basic import Csv, CsvData
class CsvCommentData(CsvData):
comment = '#' # regular expression not allowed for this reader
def _strip_trailing_comments(self, lines):
for line in lines:
index = line.rfind(self.comment)
if index >= 0:
line = line[:index]
yield line
def process_lines(self, lines):
return super(CsvCommentData, self).process_lines(self._strip_trailing_comments(lines))
class CsvComment(Csv):
_format_name = 'csv_comment'
_io_registry_can_write = True
_description = 'Comma-separated-values with trailing comments allowed'
data_class = CsvCommentData