Skip to main content

Python的文件识别库

项目描述

确认

构建状态 Azure DevOps 覆盖范围 pre-commit.ci 状态 PyPI 版本

Python的文件识别库。

给定一个文件(或有关文件的一些信息),返回一组标准化的标签来标识文件是什么。

安装

pip install identify

用法

使用磁盘上的文件

如果您在磁盘上有一个实际文件,您可以获得尽可能多的信息(所有其他方法的超集):

>>> from identify import identify
>>> identify.tags_from_path('/path/to/file.py')
{'file', 'text', 'python', 'non-executable'}
>>> identify.tags_from_path('/path/to/file-with-shebang')
{'file', 'text', 'shell', 'bash', 'executable'}
>>> identify.tags_from_path('/bin/bash')
{'file', 'binary', 'executable'}
>>> identify.tags_from_path('/path/to/directory')
{'directory'}
>>> identify.tags_from_path('/path/to/symlink')
{'symlink'}

使用磁盘上的文件时,执行的检查是:

  • 文件类型(文件、符号链接、目录、套接字)
  • 模式(是否可执行?)
  • 文件名(主要基于扩展名)
  • 如果可执行,则读取 shebang 并解释解释器

如果你只有文件名

>>> identify.tags_from_filename('file.py')
{'text', 'python'}

如果你只有口译员

>>> identify.tags_from_interpreter('python3.5')
{'python', 'python3'}
>>> identify.tags_from_interpreter('bash')
{'shell', 'bash'}
>>> identify.tags_from_interpreter('some-unrecognized-thing')
set()

作为一个cli

$ identify-cli --help
usage: identify-cli [-h] [--filename-only] path

positional arguments:
  path

optional arguments:
  -h, --help       show this help message and exit
  --filename-only
$ identify-cli setup.py; echo $?
["file", "non-executable", "python", "text"]
0
$ identify-cli setup.py --filename-only; echo $?
["python", "text"]
0
$ identify-cli wat.wat; echo $?
wat.wat does not exist.
1
$ identify-cli wat.wat --filename-only; echo $?
1

识别 LICENSE 文件

identify还有一个用于确定文件中包含什么类型的许可证的 api。该例程大致基于被 许可人使用的方法(github 用来计算 repo 许可证的 ruby​​ gem)。

使用的方法identify如下:

  1. 剥离版权线
  2. 规范化所有空格
  3. 返回任何完全匹配
  4. 返回最接近的编辑距离(编辑距离 < 5%)

要使用 api,请通过以下方式安装pip install identify[license]

>>> from identify import identify
>>> identify.license_id('LICENSE')
'MIT'

license_id函数的返回值是一个SPDX id。目前许可证来自choosealicense.com

这个怎么运作

调用这样tags_from_path做:

  1. 类型是什么:文件、符号链接、目录?如果不是文件,请在此处停止。
  2. 是否可执行?添加适当的标签。
  3. 我们能识别文件扩展名吗?如果是这样,请添加适当的标签,到此为止。这些标签将包括二进制/文本。
  4. 查看文件的前 X 个字节。使用这些来确定是二进制还是文本,添加相应的标记。
  5. 如果识别为上述文本,请尝试阅读和解释 shebang,并添加适当的标签。

按照设计,这意味着我们不需要部分读取我们识别文件扩展名的文件。

项目详情