表を読む

一般的なASCII表の多くはご利用いただけます read() 機能::

>>> from astropy.io import ascii
>>> data = ascii.read(table)  

ここ、ここ table ファイル名、表の文字列は、形式または表行リストを表します。返り値. (data 本例では)は1つである Table 物体です。

デフォルトの場合、 read() やってみます guess the table format すべてのサポートされているフォーマットを試すことで。大規模なファイルの場合、リーダは、1つのフォーマットが成功するまで、各許容フォーマットを使用してファイルを解析しようと試みるので、ファイルフォーマットの推測は通常遅い。大きな書類については、推測を無効にすることをお勧めします guess=False それがそうです。

もし推測が機能しなければ、異常な表をフォーマットするように、あなたは与える必要があるかもしれません。 astropy.io.ascii フォーマットに関する他のヒント:

>>> data = astropy.io.ascii.read('data/nls1_stackinfo.dbout', data_start=2, delimiter='|')  
>>> data = astropy.io.ascii.read('data/simple.txt', quotechar="'")  
>>> data = astropy.io.ascii.read('data/simple4.txt', format='no_header', delimiter='|')  
>>> data = astropy.io.ascii.read('data/tab_and_space.txt', delimiter=r'\s')  

♪the read() 関数は詳細表式を指定するパラメータを多く受け取る.異なるフォーマットは、異なるデフォルト値を定義することができるので、以下の説明では、“典型的な”デフォルト値を言及することがある。これは…。 Basic フォーマットリーダは、他の同様の文字分離フォーマットである。

パラメータ read()

table入力表.

読み込むテーブルを指定する方法は4つあります

  • ファイルのパス(文字列)

  • 改行によって区切られたすべての表行を含む単一の文字列

  • Read()メソッドを呼び出すことができるクラスファイル·オブジェクトを持つ

  • 各リスト要素が1つの表行である文字列リスト

前の2つのオプションの違いは,文字列に改行があるかどうかである.これは、有効なファイル名が通常、改行を含まず、有効なテーブル入力が少なくとも2行を含むと仮定する。お読みになった表にご注意ください no_header フォーマットは合法的に単一の行から構成されてもよく、この場合、文字列をリストとして単一の項と共に転送することは、ファイル名として解釈されないことを保証する。

formatファイルフォーマット(デフォルト値=“BASIC”)

ASCIIテーブルのトップフォーマットを指定し、例えば、基本文字区切りのテーブル、固定フォーマットテーブル、CDS互換テーブルなどであり、このパラメータの値は、必須である。 サポートのフォーマット それがそうです。

guessフォームフォーマットを推測してみます(デフォルト値=なし)

Trueに設定すると read() 多くの可能なテーブルフォーマットの配列をループすることによって、各場合においてテーブルを読み取ることを試みることによって、テーブルフォーマットを推測することが試みられる。ご参照ください Guess table format 部分的にもっと詳しい情報を知っています。

delimiter列区切り文字列

フィールドを区切るための単文字文字列は,通常空白文字とデフォルトである.その他の一般的な値は、“\s”(スペース)、“または”|“または”\t“(タブ)である場合があります。値“\s”は、タブとスペース文字の任意の組み合わせで境界列を定めることを許可します。

comment定義表中の注釈行の正規表現

もし comment 正規表現が表の行の先頭に一致すると、行はタイトルまたはデータ処理から破棄される。上の basic フォーマットでは“\s*#”(任意のスペースのかかと#)とします。

quotechar特殊な文字を含むフィールドを参照するための1文字文字列

引用符文字を指定し、一般に単引用符文字または二重引用符文字である。これは,スペースで区切られたテーブルにスペースの入ったテキストフィールドを読み込む際に非常に有用である.デフォルト値は通常二重引用符です。

header_start見出し行の行索引

これには重要な非注釈行のみが含まれており,カウントは0から始まる.Noneに設定すると,見出し行がないことを示し,列名を自動生成する.参照してください Specifying header and data location もっと細かいことを知っています。

data_startデータカウントを開始する行インデックス

これには重要な非注釈行のみが含まれており,カウントは0から始まる.参照してください Specifying header and data location もっと細かいことを知っています。

data_endデータ末尾の行索引

これは重要な非注釈行のみを含み、終了からカウントすることは負であってもよい。参照してください Specifying header and data location もっと細かいことを知っています。

コードコード. :ファイルのコードを読み込む (default=None

いつ? None 使用 locale.getpreferredencoding コードとして使われていますこれは内蔵されたデフォルト行動と一致しています open もしなければ mode パラメータを提供した。

変換器.dict データ型変換器のデータ型変換器の辞書

ご参照ください Converters 部分的にもっと情報を知っています。

names各データ列に対応する名前リスト

各データ列の完全名前リストを定義する.これは、タイトルに見つかった名前(存在する場合)をカバーするだろう。提供されていない場合は、タイトル中の名前を使用し、タイトルがない場合は、自動生成された名前を使用する。

include_names出力に含まれる名前リスト

見出しや names パラメータは,このリスト中の“出力列のみ”を選択する.もし提供されていない場合は、すべての名前を含めてください。

exclude_names出力から除外する名前リスト

これらの名前は出力列リストから除外する.これは適用される その後 ♪the include_names 濾過する。指定されていなければ,どの列も排除しない.

fill_values充填値説明子リスト

破損または紛失したので、出力テーブルでマスクすべき入力テーブルエントリを指定します。ご参照ください Bad or missing values 部分的により多くの情報と例を取得する。デフォルトの場合,どの空白表の値も欠落とみなされる.

fill_include_names :以下の要因の影響を受ける列名リスト fill_values以下の要因の影響を受ける列名リスト

これは列名のリストです(タイトルや names パラメータ)は、充填値のすべての列を使用するために使用される。 None (デフォルト値)が適用されます fill_values すべての欄です。

fill_exclude_names :影響を受けない列名リスト fill_values影響を受けない列名リスト

これは列名のリストです(タイトルや names パラメータ)は、値は not 満載して帰る。このパラメータは fill_include_names それがそうです。値が. None (デフォルト)列は除外されません。

Outputter出力器類

これは,元のデータテーブルの値を返す出力オブジェクトに変換する. read() それがそうです。黙認する. TableOutputter それは1つに戻ります Table 対象(参照) Data Tables )。

Inputter入力者類

これは通常指定されません。

data_Splitter :データ列を分割する分割器クラス

header_Splitter :見出し列を分割する分割器クラス

fast_readerCエンジンを使うかどうか

これは…。 True あるいは…。 False 同時に一人でもあります dict 選択肢があります。(会いましょう) FAST ASCII I/O

読者.読者 :Readerクラス( 捨てて使う. …に賛成する. formatリーダー類(

このパラメータは、ASCIIテーブルのトップフォーマットを指定し、例えば、基本文字分割テーブル、固定フォーマットテーブル、CDS互換テーブルなどであるか否かを指定し、このパラメータの値はReaderクラスでなければならない。基本的な使い方はこれは内蔵されていることを意味します 拡張モジュールリーダクラス それがそうです。

タイトルとデータ位置を指定する

The three parameters header_start, data_start, and data_end make it possible to read a table file that has extraneous non-table data included. This is a case where you need to help out astropy.io.ascii and tell it where to find the header and data.

ファイルをタイトルやデータコンポーネントとして処理する場合,すべての空行(スペース文字を含む可能性がある)とアノテーション行(通常はアノテーション文字で開始される. # )が剥離される その前に ヘッダとデータ解析コードは表の内容を見ることができる.

例を引く

To use the parameters header_start, data_start, and data_end to read a table with non-table data included, take the file below. The column on the left is not part of the file but instead shows how astropy.io.ascii is viewing each line and the line count index.

Index    Table content
------ ----------------------------------------------------------------
   -  | # This is the start of my data file
   -  |
   0  | Automatically generated by my_script.py at 2012-01-01T12:13:14
   1  | Run parameters: None
   2  | Column header line:
   -  |
   3  | x y z
   -  |
   4  | Data values section:
   -  |
   5  | 1 2 3
   6  | 4 5 6
   -  |
   7  | Run completed at 2012:01-01T12:14:01

In this case you would have header_start=3, data_start=5, and data_end=7. The convention for data_end follows the normal Python slicing convention where to select data rows 5 and 6 you would do rows[5:7]. For data_end you can also supply a negative index to count backward from the end, so data_end=-1 (like rows[5:-1]) would work in this case.

注釈

…の前に astropy V 1.1では,1つ以上のスペース文字を含む空行が誤って計算された誤りがある. header_start しかし計算されていない data_start そして data_end それがそうです。コードが正しくないバージョン1.1以前のアクションに依存する場合、それを修正する必要があります。

誤りまたは不足値

ASCIIデータテーブルには、エラーまたは欠落値が含まれている場合があります。一般的な場合の1つは、テーブルに含まれる空白エントリに利用可能なデータがないことである。

実例.

空エントリを含む表を例にすると:

>>> weather_data = """
...   day,precip,type
...   Mon,1.5,rain
...   Tues,,
...   Wed,1.1,snow
...   """

デフォルトの場合、 read() 空白エントリはエラー/欠落と解釈され、対応するマスク値を設定することで True **

>>> dat = ascii.read(weather_data)
>>> print(dat)
day  precip type
---- ------ ----
 Mon    1.5 rain
Tues     --   --
 Wed    1.1 snow

マスク(欠落)値を特定の値に置き換える場合は、マスク列を設定してください fill_value 属性を取得し、このテーブルの“パディング”バージョンを取得します。以下に示す.

>>> dat['precip'].fill_value = -999
>>> dat['type'].fill_value = 'N/A'
>>> print(dat.filled())
day  precip type
---- ------ ----
 Mon    1.5 rain
Tues -999.0  N/A
 Wed    1.1 snow

ASCII表には,データ誤りや損失を示す他の指標がある可能性がある.例えば、テーブルは、数字の有効な表現ではない文字列値(例えば、 "..." )、またはテーブルは、例えば特別な値を有する場合がある -999 それらは失われたデータを示すように選択される。♪the read() 関数はこれらの状況に適応する柔軟なシステムを持ち,変換中に入力データ中の指定された文字列を“欠落データ”と表記する方法である.いつ失われたデータが発見されても,出力はマスクテーブルとなる.

これは使用です fill_values キーワードパラメータは、単一の欠損値仕様に設定することができます <missing_spec> あるいは1部 <missing_spec> メタグループ::

fill_values = <missing_spec> | [<missing_spec1>, <missing_spec2>, ...]
<missing_spec> = (<match_string>, '0', <optional col name 1>, <optional col name 2>, ...)

時計を読むと <missing_spec> 常に文字列にしなければならない '0' そうでなければ予期せぬ行動が起こるかもしれません 1. デフォルトの場合、 <missing_spec> 列名文字列が提供されない限り、すべての列に適用される。制限列のもう1つの方法は fill_include_names そして fill_exclude_names 中のキーワードパラメータ read() それがそうです。

以下の例では、典型的な占位子を使用して欠落値を充填した後、天気表を読み返す。

>>> table = ['day   precip  type',
...          ' Mon     1.5  rain',
...          'Tues  -999.0   N/A',
...          ' Wed     1.1  snow']
>>> t = ascii.read(table, fill_values=[('-999.0', '0', 'precip'), ('N/A', '0', 'type')])
>>> print(t)
day  precip type
---- ------ ----
 Mon    1.5 rain
Tues     --   --
 Wed    1.1 snow

注釈

中のデフォルト設定 read() はい。 fill_values=('','0') それがそうです。これは、任意のデータタイプ(整数型、浮動小数点型、または文字列)の空白エントリを欠落としてマークします。もし…。 fill_values 呼び出しでは明示的に設定されています read() 空白エントリを失われたデフォルトアクションとしてマークすることは適用されない.例えば設定 fill_values=None この自動マスクは、他の充填値を設定することなく無効にされる。これは文字列に非常に有用であり,その1つの値は "" それがそうです。

1

要求将. '0' これは古いインタフェースの残された問題であり,このインタフェースを保持することは後方互換性のためであり,また,このインタフェースを保持するためにも後方 fill_value 読むためのフォーマットは fill_value 表を書くのに使います。2つ目の要素は <missing_spec> タプルは、置換のために任意の文字列値であってもよい <match_string> タイプ変換の前にストリーム中の文字列を入力します。これは最終的に“マスクの後ろ”の値であり,決して直接アクセスしてはならない.価値しかない '0' 列データタイプの検出を試み,タイプ変換を行う場合は中性である.例えば、もしあなたが使用すれば 'nan' 上の <match_string> 値は,全型列が浮動小数点型で終了する.

覆いをする列を選ぶ

♪the read() 関数はパラメータを提供する fill_include_names そして fill_exclude_names 使用する列を選択するには、以下の操作を実行してください fill_values 上記のマスキングプロセス。

これらのパラメータの使用は一般的ではないが、場合によっては、テーブルを読み取るために必要なコードを大幅に簡略化することができる。簡単な例を挙げてみましょう fill_include_names そして fill_exclude_names 最も基本的で典型的な場合に使用することができる:

>>> from astropy.io import ascii
>>> lines = ['a,b,c,d', '1.0,2.0,3.0,4.0', ',,,']
>>> ascii.read(lines)
<Table length=2>
   a       b       c       d
float64 float64 float64 float64
------- ------- ------- -------
    1.0     2.0     3.0     4.0
     --      --      --      --

>>> ascii.read(lines, fill_include_names=['a', 'c'])
<Table length=2>
   a     b      c     d
float64 str3 float64 str3
------- ---- ------- ----
    1.0  2.0     3.0  4.0
     --           --

>>> ascii.read(lines, fill_exclude_names=['a', 'c'])
<Table length=2>
 a      b     c      d
str3 float64 str3 float64
---- ------- ---- -------
 1.0     2.0  3.0     4.0
          --           --

推測表形式

もし guess パラメータ入力 read() Trueに設定すると read() 多くの可能なテーブルフォーマットの配列をループすることによって、各場合においてテーブルを読み取ることを試みることによって、テーブルフォーマットを推測することが試みられる。成功し、テーブルの第1のフォーマットを読み取るために使用されるだろう。成功するためには,リーダはこの表の解析に成功し,以下の要求を満たす必要がある.

  • 少なくとも二つのリストです。

  • すべての列名は浮動小数点型や整数型数字ではない.

  • 列名は、スペース、コンマ、タブ、単引用符、二重引用符、または縦線(|)で始まるか、または末尾にすることはできません。

これらの要求は,表の解析に誤りフォーマットで成功した場合に誤報が生じる可能性を低下させている.1つの一般的な場合は、数値列を有するがタイトル行がないテーブルであり、本例では astropy.io.ascii 列名は自動的に割り当てられ,数字のように見える列名に制限があるためである.

順序を推測する

推測の順序は次のPythonコードに示すように、その中で Reader 異なるファイルフォーマットの読み取りを実際に実現するクラスである:

for Reader in (Ecsv, FixedWidthTwoLine, Rst, FastBasic, Basic,
               FastRdb, Rdb, FastTab, Tab, Cds, Daophot, SExtractor,
               Ipac, Latex, AASTex):
    read(Reader=Reader)

for Reader in (CommentedHeader, FastBasic, Basic, FastNoHeader, NoHeader):
    for delimiter in ("|", ",", " ", "\\s"):
        for quotechar in ('"', "'"):
            read(Reader=Reader, delimiter=delimiter, quotechar=quotechar)

注意してください。 FixedWidth 派生リーダはデフォルトの推測系列には含まれていない(これは問題となる)ため,このような表を読むためには使用しなければならない. format キーワード。高速読書エンジンと互換性のあるフォーマットは、通常の読書エンジンの前に高速エンジンを使用しようと試みることに留意されたい。

テーブル(列要求に依存する)の読み取りに成功したという推測が一度もない場合には、ユーザが提供するパラメータのみを用いて最後の試みを行うが、列要求はチェックしない。このようにして、数字のように見える1列または列名のみのテーブルの読み取りに成功することができる。

推測プロセスは、Reader、delimiter、およびqutecharパラメータの任意の値、およびread()関数に提供される高速リーダーのオプションを考慮する。衝突する可能性のあるどんな推測もスキップされるだろう。例えば、呼び出し::

>>> data = ascii.read(table, Reader=ascii.NoHeader, quotechar="'")

4つの可能なセパレータだけを試してみますすべての競合するReaderとQuotecharの組み合わせをスキップします同様にどんな設定でも fast_reader これはFASTエンジンを用いる必要があり,上記リーダリストのFASTバリエーションのみを試みる.

無効にする

2つの方法で推測を無効にすることができます

import astropy.io.ascii
data = astropy.io.ascii.read(table)               # guessing enabled by default
data = astropy.io.ascii.read(table, guess=False)  # disable for this call
astropy.io.ascii.set_guess(False)                 # set default to False globally
data = astropy.io.ascii.read(table)               # guessing disabled

誤りを除く.

推測過程をより深く理解し、何かが予想通りに仕事をしていない場合にデバッグを行う可能性がありますので、ご利用ください get_read_trace() 機能します。これは,前回の呼び出しの試し読み形式のバックトラックに戻る. read() それがそうです。

注釈とメタデータ

読み取り中に検出されたどの注釈行も通過する. comments 入力表の中の .meta 辞書です。

例を引く

読み出し中に検出されたインタプリタ行を出力テーブルに挿入すると,以下のようになる.

>>> table='''# TELESCOPE = 30 inch
...          # TARGET = PV Ceph
...          # BAND = V
...          MJD mag
...          55555 12.3
...          55556 12.4'''
>>> dat = ascii.read(table)
>>> print(dat.meta['comments'])
['TELESCOPE = 30 inch', 'TARGET = PV Ceph', 'BAND = V']

そして当を受ける. astropy.io.ascii 注釈行は何の後処理も行わず,カスタム後処理はメタデータ行のアノテーションを読み直すことで行うことができる.以下は、注釈のフォーマットが“#key=value”である例である。

>>> header = ascii.read(dat.meta['comments'], delimiter='=',
...                     format='no_header', names=['key', 'val'])
>>> print(header)
   key      val
--------- -------
TELESCOPE 30 inch
   TARGET PV Ceph
     BAND       V

インバータ.

astropy.io.ascii Pythonなどの変換器関数を使用して、表の元の文字列値を数値データタイプに変換します。 int そして float 機能します。例えば int("5.0") 失敗し、Float(“5.0”)が成功し、Python Float形式で5.0に戻ります。

デフォルト変換器は:

default_converters = [astropy.io.ascii.convert_numpy(numpy.int),
                      astropy.io.ascii.convert_numpy(numpy.float),
                      astropy.io.ascii.convert_numpy(numpy.str)]

These take advantage of the convert_numpy() function which returns a two-element tuple (converter_func, converter_type) as described in the previous section. The type provided to convert_numpy() must be a valid NumPy type such as numpy.int, numpy.uint, numpy.int8, numpy.int64, numpy.float, numpy.float64, or numpy.str.

各列のデフォルト変換器は使用可能です converters キーワード:

>>> import numpy as np
>>> converters = {'col1': [ascii.convert_numpy(np.uint)],
...               'col2': [ascii.convert_numpy(np.float32)]}
>>> ascii.read('file.dat', converters=converters)  

Fortranスタイルの指数

♪the fast converter C入力解析器は exponent_style 標準文字ではなくカスタム文字を定義するためのオプション 'e' 入力ファイル中の指数フォーマットについては,たとえば,Fortranスタイルの倍精度数字,例えば,Fortranパターンの倍精度数字を読み込む. '1.495978707D+13'

>>> ascii.read('double.dat', format='basic', guess=False,
...            fast_reader={'exponent_style': 'D'})  

The special setting 'fortran' is provided to allow for the auto-detection of any valid Fortran exponent character ('E', 'D', 'Q'), as well as of triple-digit exponents prefixed with no character at all (e.g., '2.1127123261674622-107'). All values and exponent characters in the input data are case-insensitive; any value other than the default 'E' implies the automatic setting of 'use_fast_converter': True.

高度なカスタマイズ

ここでは,特殊な状況に対処するために基本機能をどのように拡張するかを示すいくつかの例を提供する.これらの例を超えるためには,既存のものを読むことが最も良い参考となる 拡張モジュールリーダクラス それがそうです。

実例.

特殊な場合には,これらの例は,基本機能をどのように拡張するかを示す. astropy.io.ascii それがそうです。

クラス継承によるカスタムリーダの定義

新しいリーダクラスを定義する最も有用な方法は継承である.これはすべての内蔵リーダの定義方式であるため,コードには多くの例がある.

ほとんどの場合、あなたは、ヘッダを処理するクラスと、データを処理するクラスと、それらを関連付けるためのリーダクラスとを定義するであろう。以下は、基本リーダと同様のリーダを定義するコードの一例であるが、タイトルおよびデータは、ファイルの異なる同業者から開始される:

# Note: NoHeader is already included in astropy.io.ascii for convenience.
class NoHeaderHeader(BasicHeader):
    '''Reader for table header without a header

    Set the start of header line number to `None`, which tells the basic
    reader there is no header line.
    '''
    start_line = None

class NoHeaderData(BasicData):
    '''Reader for table data without a header

    Data starts at first uncommented line since there is no header line.
    '''
    start_line = 0

class NoHeader(Basic):
    """Read a table with no header line.  Columns are autonamed using
    header.auto_format which defaults to "col%d".  Otherwise this reader
    the same as the :class:`Basic` class from which it is derived.  Example::

      # Table data
      1 2 "hello there"
      3 4 world
    """
    _format_name = 'no_header'
    _description = 'Basic table with no headers'
    header_class = NoHeaderHeader
    data_class = NoHeaderData

やや複雑な場合には、基底クラスをカバーすることもできるいくつかの方法が実装される。

# Note: CommentedHeader is already included in astropy.io.ascii for convenience.
class CommentedHeaderHeader(BasicHeader):
    """Header class for which the column definition line starts with the
    comment character.  See the :class:`CommentedHeader` class  for an example.
    """
    def process_lines(self, lines):
        """Return only lines that start with the comment regexp.  For these
        lines strip out the matching characters."""
        re_comment = re.compile(self.comment)
        for line in lines:
            match = re_comment.match(line)
            if match:
                yield line[match.end():]

    def write(self, lines):
        lines.append(self.write_comment + self.splitter.join(self.colnames))


class CommentedHeader(Basic):
    """Read a file where the column names are given in a line that begins with
    the header comment character. ``header_start`` can be used to specify the
    line index of column names, and it can be a negative index (for example -1
    for the last commented line).  The default delimiter is the <space>
    character.::

      # col1 col2 col3
      # Comment line
      1 2 3
      4 5 6
    """
    _format_name = 'commented_header'
    _description = 'Column names in a commented line'

    header_class = CommentedHeaderHeader
    data_class = NoHeaderData

機能的なカスタムカードリーダの定義

新しいクラスを定義することに加えて、リーダのインスタンスを取得し、関数においてこのリーダインスタンスの属性を修正することができる:

def read_rdb_table(table):
    reader = astropy.io.ascii.Basic()
    reader.header.splitter.delimiter = '\t'
    reader.data.splitter.delimiter = '\t'
    reader.header.splitter.process_line = None
    reader.data.splitter.process_line = None
    reader.data.start_line = 2

    return reader.read(table)

Create a custom splitter.process_val function **

# The default process_val() normally just strips whitespace.
# In addition have it replace empty fields with -999.
def process_val(x):
    """Custom splitter process_val function: Remove whitespace at the beginning
    or end of value and substitute -999 for any blank entries."""
    x = x.strip()
    if x == '':
        x = '-999'
    return x

# Create an RDB reader and override the splitter.process_val function
rdb_reader = astropy.io.ascii.get_reader(Reader=astropy.io.ascii.Rdb)
rdb_reader.data.splitter.process_val = process_val

大表をブロックして読み取る

ASCII表を読み込むデフォルトプロセスのメモリ効率は高くなく,一時的にファイルサイズよりもはるかに多くのメモリが必要となる可能性がある(最大5から10倍).一時メモリ需要が利用可能メモリを超えた場合,ディスクキャッシュを使用すると著しく遅くなる可能性がある.

この場合、限られたサイズのより小さいブロックでテーブルを読み取ることができる方法がある。2つの可能な方法があります

  • 分割して表を読み,その過程で最後の表をまとめる.これは最終表に必要なメモリよりも少し多い.

  • Python生成器関数を使用して戻る Table 入力テーブルの各ブロックについて作成します。これは、最終統合テーブルを返さないので、任意の大きなテーブルをスキャンすることを可能にする。

The chunk reading functionality is most useful for very large tables, so this is available only for the FAST ASCII I/O readers. The following formats are supported: tab, csv, no_header, rdb, and basic. The commented_header format is not directly supported, but as a workaround one can read using the no_header format and explicitly supply the column names using the names argument.

ブロックごとに時計を読み取るには、提供しなければなりません fast_reader キーワードパラメータ付きキーワードパラメータ dict これには chunk_size キー,値は読み込む入力テーブルのブロックごとの近似サイズ(バイト単位)である.また、もしあなたが提供すれば chunk_generator 設定は True その後、入力全体のために単一のテーブルを返すのではなく、入力された各ブロックにテーブルを提供する反復器を返す。

実例.

ピークメモリの使用を制限しながらテーブル全体を読み出す:

# Read a large CSV table in 100 Mb chunks.

tbl = ascii.read('large_table.csv', format='csv', guess=False,
                 fast_reader={'chunk_size': 100 * 1000000})

反復器を用いてブロック読取テーブルを使用するためには,CSVテーブルを繰り返し選択する. Vmag 列は8.0未満(例えば、表中の輝度が8.0 mgより大きいすべての恒星)。これらすべてのサブテーブルを集めて最後に積み重ねます**

from astropy.table import vstack

# tbls is an iterator over the chunks (no actual reading done yet)
tbls = ascii.read('large_table.csv', format='csv', guess=False,
                  fast_reader={'chunk_size': 100 * 1000000,
                               'chunk_generator': True})

out_tbls = []

# At this point the file is actually read in chunks.
for tbl in tbls:
    bright = tbl['Vmag'] < 8.0
    if np.count_nonzero(bright):
        out_tbls.append(tbl[bright])

out_tbl = vstack(out_tbls)

注釈

Performance

指定 format 明確にして使う guess=False 大きなテーブルにはいい考えですね。これは、既知のフォーマットの典型的な場合に不必要な推測を行うことを回避することができる。

♪the chunk_size 一般に、利用可能なシステムメモリが与えられた場合の合理的な最大値に設定されるべきである。各ブロックの処理には関連するオーバヘッドがあるため,ブロックが少ないほどよい.