Python的文件识别库
项目描述
确认
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如下:
- 剥离版权线
- 规范化所有空格
- 返回任何完全匹配
- 返回最接近的编辑距离(编辑距离 < 5%)
要使用 api,请通过以下方式安装pip install identify[license]
>>> from identify import identify
>>> identify.license_id('LICENSE')
'MIT'
该license_id函数的返回值是一个SPDX id。目前许可证来自choosealicense.com。
这个怎么运作
调用这样tags_from_path做:
- 类型是什么:文件、符号链接、目录?如果不是文件,请在此处停止。
- 是否可执行?添加适当的标签。
- 我们能识别文件扩展名吗?如果是这样,请添加适当的标签,到此为止。这些标签将包括二进制/文本。
- 查看文件的前 X 个字节。使用这些来确定是二进制还是文本,添加相应的标记。
- 如果识别为上述文本,请尝试阅读和解释 shebang,并添加适当的标签。
按照设计,这意味着我们不需要部分读取我们识别文件扩展名的文件。