用于在Python中代表不同文件格式的类,用于数据工作流中的类型提示
项目描述
FileFormats
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-gz
或datascience/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许可
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。