68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
import io
|
|
|
|
from agate import fixed
|
|
from agate import utils
|
|
|
|
|
|
@classmethod
|
|
def from_fixed(cls, path, schema_path, column_names=utils.default, column_types=None, row_names=None, encoding='utf-8', schema_encoding='utf-8'):
|
|
"""
|
|
Create a new table from a fixed-width file and a CSV schema.
|
|
|
|
Schemas must be in the "ffs" format. There is a repository of such schemas
|
|
maintained at `wireservice/ffs <https://github.com/wireservice/ffs>`_.
|
|
|
|
:param path:
|
|
File path or file-like object from which to read fixed-width data.
|
|
:param schema_path:
|
|
File path or file-like object from which to read schema (CSV) data.
|
|
:param column_names:
|
|
By default, these will be parsed from the schema. For alternatives, see
|
|
:meth:`.Table.__init__`.
|
|
:param column_types:
|
|
See :meth:`.Table.__init__`.
|
|
:param row_names:
|
|
See :meth:`.Table.__init__`.
|
|
:param encoding:
|
|
Character encoding of the fixed-width file. Note: if passing in a file
|
|
handle it is assumed you have already opened it with the correct
|
|
encoding specified.
|
|
:param schema_encoding:
|
|
Character encoding of the schema file. Note: if passing in a file
|
|
handle it is assumed you have already opened it with the correct
|
|
encoding specified.
|
|
"""
|
|
from agate.table import Table
|
|
|
|
close_f = False
|
|
|
|
if not hasattr(path, 'read'):
|
|
f = io.open(path, encoding=encoding)
|
|
close_f = True
|
|
else:
|
|
f = path
|
|
|
|
close_schema_f = False
|
|
|
|
if not hasattr(schema_path, 'read'):
|
|
schema_f = io.open(schema_path, encoding=schema_encoding)
|
|
close_schema_f = True
|
|
else:
|
|
schema_f = path
|
|
|
|
reader = fixed.reader(f, schema_f)
|
|
rows = list(reader)
|
|
|
|
if close_f:
|
|
f.close()
|
|
|
|
if close_schema_f:
|
|
schema_f.close()
|
|
|
|
if column_names == utils.default:
|
|
column_names = reader.fieldnames
|
|
|
|
return Table(rows, column_names, column_types, row_names=row_names)
|