如何检查文件的类型,而不在Python扩展?如何检查文件的类型,而不在Python扩展?(How t

2019-05-17 10:57发布

我有一个文件夹满档而这些不具备的扩展。 如何检查的文件类型? 我要检查的文件类型,并相应更改文件名。 让我们假设一个函数filetype(x)返回文件类型像png 。 我想做这个:

files = os.listdir(".")
for f in files:
    os.rename(f, f+filetype(f))

我该怎么做呢?

Answer 1:

有迹象表明,能够基于自己的内容(通常是一个头/魔法号)文件,不依赖于文件名或扩展Python库。

如果你解决了许多不同类型的文件,你可以使用python-magic 。 这只是一个Python的完善结合magic库。 这在有限的使用我做的是一个良好的口碑和(小签注),它一直是固体。

还有一些更加专业的文件类型库。 例如,Python标准库具有imghdr模块,做同样的事情只是图像的文件类型。



Answer 2:

在Python的魔术库提供您需要的功能。

您可以安装该库pip install python-magic ,并使用它,如下所示:

>>> import magic

>>> magic.from_file('iceland.jpg')
'JPEG image data, JFIF standard 1.01'

>>> magic.from_file('iceland.jpg', mime=True)
'image/jpeg'

>>> magic.from_file('greenland.png')
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'

>>> magic.from_file('greenland.png', mime=True)
'image/png'

在这种情况下,Python代码是调用到libmagic罩,其是由* NIX使用的相同的库下方file命令。 因此,该做同样的事情作为子/基于shell的答案,但没有这种开销。



Answer 3:

在UNIX和Linux存在的file命令来猜测文件类型。 甚至还有一个窗口 。

从手册页 :

文件测试,试图把它归类每个参数。 有三组测试,在这个顺序执行:文件系统测试,幻数测试,语言测试。 该成功第一测试导致要被打印的文件类型。

您将需要运行file与指令subprocess模块,然后分析结果,以找出一个扩展。

编辑:忽略我的答案。 使用克里斯-约翰逊的回答吧。



Answer 4:

import subprocess
p = sub.Popen('file yourfile.txt',stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output

正如史蒂芬指出, subprocess是这样的。 你可以得到上面,因为这的方式输出指令后说



Answer 5:

您还可以安装官方file的Python绑定,一个库调用file-magic (它不使用ctypes的,像python-magic )。

它的问世PyPI上的文件,魔术和在Debian为蟒蛇魔法 。 对我来说,这个库是最好用的,因为它是可用的PyPI上和在Debian(和其他可能的分布),使得部署软件的过程更容易。 我的博客上讲述如何使用它 ,也。



Answer 6:

对于较新的子库,您现在可以使用下面的代码(* nix中唯一的解决方案):

import subprocess
import shlex

filename = 'your_file'
cmd = shlex.split('file --mime-type {0}'.format(filename))
result = subprocess.check_output(cmd)
mime_type = result.split()[-1]
print mime_type


Answer 7:

在图像的情况下,你可以使用imghdr模块。

>>> import imghdr
>>> imghdr.what('8e5d7e9d873e2a9db0e31f9dfc11cf47')  # You can pass a file name or a file object as first param. See doc for optional 2nd param.
'png'

Python的2 imghdr DOC
Python 3中imghdr DOC



Answer 8:

仅适用于Linux,但使用“sh”的Python模块,你可以简单地调用任何shell命令

https://pypi.org/project/sh/

PIP安装SH

进口SH

sh.file( “/根/文件”)

输出:/根目录/文件:ASCII文本



文章来源: How to check type of files without extensions in python?