跳转到主要内容

用于在Python中代表不同文件格式的类,用于数据工作流中的类型提示

项目描述

FileFormats

CI/CD Codecov Code style: black Static Badge Python Versions Latest Version Documentation Status

Logo Small

Fileformats 提供了一个库,其中包含作为Python类实现的文件格式类型,用于验证、检测、类型化,并提供钩子以实现额外功能和格式转换。通常通过文件扩展名和“魔数”(如果适用)的组合来验证/识别格式。与其它文件类型包不同,FileFormats 支持多文件数据格式(“文件集”),这在科学工作流程中很常见,例如,使用单独的头文件和数据文件。

文件格式提供了一种灵活的扩展框架,用于添加用于特定文件格式的自定义识别程序,例如需要检查头文件以定位数据文件、包含特定文件类型的目录,或查看元数据字段以定义特定子类型(例如功能MRI DICOM文件集)的格式。这些带有辅助文件的文件集可以像单个文件对象一样移动、复制和散列。

请参阅扩展模板,了解如何设计文件格式扩展模块,以增强主仓库中实现的标准化文件类型,并添加自定义领域/供应商特定的文件格式类型(例如fileformats-medimage)。

关于MIME类型的覆盖范围说明

通过半自动地从IANA MIME类型网站抓取文件扩展名和魔数,已将所有非供应商标准的MIME类型(即不匹配*/vnd.**/x-*)的支持添加到文件格式中。因此,库中许多格式尚未在真实数据上得到充分测试,因此应谨慎对待。如果您在使用实现的文件类型时遇到任何问题,请通过GitHub跟踪器提出问题。

计划在v1.0中添加对供应商格式的支持。

安装

文件格式可以通过PyPI安装Python >= 3.8

    $ python3 -m pip fileformats

需要外部依赖项的方法和转换器之间的实现需要安装相应的“extras”包,例如

    $ python3 -m pip install fileformats-extras

对于未被[IANA MIME类型]覆盖的格式(例如NIfTI、R文件、MATLAB文件)存在扩展包,可以与它们的“extras”包一起安装

    $ python3 -m pip install \
      fileformats-medimage \
      fileformats-medimage-extras \
      fileformats-datascience \
      fileformats-datascience-extras

示例

使用WithMagicNumber混合类,可以将Png格式简洁地定义为

    from fileformats.generic import File
    from fileformats.core.mixin import WithMagicNumber

    class Png(WithMagicNumber, File):
        binary = True
        ext = ".png"
        iana_mime = "image/png"
        magic_number = b".PNG"

可以通过以下方式检查文件是否为PNG格式:

    png = Png("/path/to/image/file.png")  # Checks the extension and magic number

如果在初始化或验证失败时将引发FormatMismatchError,或者对于检查验证的布尔方法,请使用matches

    if Png.matches(a_path_to_a_file):
        ... handle case ...

格式识别

可以使用两个主要功能进行格式识别

  • fileformats.core.from_mime
  • fileformats.core.find_matching

from_mime

顾名思义,此函数用于返回与给定MIME <https://www.iana.org/assignments/media-types/media-types.xhtml>__字符串对应的FileFormats类。所有非官方官方MIME类型都受支持。非官方类型可以使用application/x-name-of-type形式加载,只要类型的名称在所有已安装的格式类型中是唯一的。为了避免不同扩展类型之间的名称冲突,可以使用“MIME-like”字符串,其中使用与文件格式扩展命名空间对应的非正式注册表,例如medimage/nifti-gzdatascience/hdf5

find_matching

给定一组文件系统路径,默认情况下,find_matching将遍历所有安装的fileformats类,并返回所有验证成功的类(默认情况下排除没有特定约束的格式)。可以使用candidates关键字参数限制潜在的候选类。

格式转换

虽然主File-formats本身没有实现,但file-formats提供了挂钩,以便其他包实现额外的行为,例如格式转换。fileformats-extras <https://github.com/ArcanaFramework/fileformats-extras>__实现了标准文件格式类型之间的多个转换器,例如将归档类型转换为通用文件/目录,如果安装,则可以使用convert()方法调用。

    from fileformats.application import Zip
    from fileformats.generic import Directory

    zip_file = Zip.convert(Directory("/path/to/a/directory"))
    extracted = Directory.convert(zip_file)
    copied = extracted.copy_to("/path/to/output")

转换器是在Pydra数据流框架中实现的,可以通过创建转换任务将其链接到更广泛的Pydra工作流程

    import pydra
    from pydra.tasks.mypackage import MyTask
    from fileformats.application import Json, Yaml

    wf = pydra.Workflow(name="a_workflow", input_spec=["in_json"])
    wf.add(
        Yaml.get_converter(Json, name="json2yaml", in_file=wf.lzin.in_json)
    )
    wf.add(
        MyTask(
            name="my_task",
            in_file=wf.json2yaml.lzout.out_file,
        )
    )
    ...

或者,转换可以在Pydra工作流之外执行

    json_file = Json("/path/to/file.json")
    yaml_file = Yaml.convert(json_file)

许可证

本作品受Creative Commons Attribution 4.0 International License许可

CC0

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

fileformats-0.14.3.tar.gz (96.2 kB 查看哈希值)

上传时间 源代码

构建分发

fileformats-0.14.3-py3-none-any.whl (120.9 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面