Giter VIP home page Giter VIP logo

fileformats's Introduction

FileFormats

image

image

Supported Python versions

Latest Version

Documentation Status

Fileformats provides a library of file-format types implemented as Python classes. The file-format types are designed to be used in type validation during the construction of data workflows (e.g. Pydra, Fastr), and also provide some basic data handling methods (e.g. loading data to dictionaries) and conversions between some equivalent types When the "extended" install option is provided.

File-format types are typically identified by a combination of file extension and "magic numbers" where applicable, however, unlike many other file-type Python packages, FileFormats, supports multi-file data formats ("file sets") often found in scientific workflows, e.g. with separate header/data files. FileFormats also provides a flexible framework to add custom identification routines for exotic file formats, e.g. formats that require inspection of headers to locate data files, directories containing certain file types, or to peek at metadata fields to define specific sub-types (e.g. functional MRI DICOM file set).

See the extension template for instructions on how to design FileFormats extensions modules to augment the standard file-types implemented in the main repository with custom domain/vendor-specific file-format types.

Notes on MIME-type coverage

Support for all non-vendor standard MIME types (i.e. ones not matching */vnd.* or */x-*) has been added to FileFormats by semi-automatically scraping the IANA MIME types website for file extensions and magic numbers. As such, many of the formats in the library have not been properly tested on real data and so should be treated with some caution. If you encounter any issues with an implemented file type, please raise an issue in the GitHub tracker.

Adding support for vendor formats will be relatively straightforward, it just requires someone to do the job of manually curating the scraped data (a days work or so). Please get in touch if you are interested in helping out with this.

Installation

FileFormats can be installed for Python >= 3.7 from PyPI with

Support for converter methods between a few select formats can be installed by passing the 'extended' install extra, e.g

Examples

Using the WithMagicNumber mixin class, the Png format can be defined concisely as

Files can then be checked to see whether they are of PNG format by

which will raise a FormatMismatchError if initialisation or validation fails, or for a boolean method that checks the validation use matches

Format Conversion

While not implemented in the main File-formats itself, file-formats provides hooks for other packages to implement extra behaviour such as format conversion. The fileformats-extras implements a number of converters between standard file-format types, e.g. archive types to/from generic file/directories, which if installed can be called using the convert() method.

The converters are implemented in the Pydra dataflow framework, and can be linked into wider Pydra workflows by creating a converter task

Alternatively, the conversion can be executed outside of a Pydra workflow with

License

This work is licensed under a Creative Commons Attribution 4.0 International License

Creative Commons Attribution 4.0 International License

fileformats's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

fileformats's Issues

Type checking

Given the focus on typing in Pydra 0.23, it would be nice to get it to type-check cleanly, which would be helped by the types of fileformats being available.

I don't consider this blocking, just opening an issue for the sake of having the plan on the record.

Adding Authorship

@effigies, I was wondering whether you would like to be considered an author of fileformats or not (see AUTHORS file). FileSet.copy uses the logic that you outlined when we were discussing this in the context of Pydra.

I have also just incorporated the CIFS/mount logic that was in Pydra into fileformats as I have found that I need it when using fileformats outside of Pydra.

No worries if you'd rather not put your name to it, but just thought I would offer/mention it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.