我有一个文件夹满档而这些不具备的扩展。 如何检查的文件类型? 我要检查的文件类型,并相应更改文件名。 让我们假设一个函数filetype(x)
返回文件类型像png
。 我想做这个:
files = os.listdir(".")
for f in files:
os.rename(f, f+filetype(f))
我该怎么做呢?
我有一个文件夹满档而这些不具备的扩展。 如何检查的文件类型? 我要检查的文件类型,并相应更改文件名。 让我们假设一个函数filetype(x)
返回文件类型像png
。 我想做这个:
files = os.listdir(".")
for f in files:
os.rename(f, f+filetype(f))
我该怎么做呢?
有迹象表明,能够基于自己的内容(通常是一个头/魔法号)文件,不依赖于文件名或扩展Python库。
如果你解决了许多不同类型的文件,你可以使用python-magic
。 这只是一个Python的完善结合magic
库。 这在有限的使用我做的是一个良好的口碑和(小签注),它一直是固体。
还有一些更加专业的文件类型库。 例如,Python标准库具有imghdr
模块,做同样的事情只是图像的文件类型。
在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的答案,但没有这种开销。
在UNIX和Linux存在的file
命令来猜测文件类型。 甚至还有一个窗口 。
从手册页 :
文件测试,试图把它归类每个参数。 有三组测试,在这个顺序执行:文件系统测试,幻数测试,语言测试。 该成功第一测试导致要被打印的文件类型。
您将需要运行file
与指令subprocess
模块,然后分析结果,以找出一个扩展。
编辑:忽略我的答案。 使用克里斯-约翰逊的回答吧。
import subprocess
p = sub.Popen('file yourfile.txt',stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output
正如史蒂芬指出, subprocess
是这样的。 你可以得到上面,因为这的方式输出指令后说
您还可以安装官方file
的Python绑定,一个库调用file-magic
(它不使用ctypes的,像python-magic
)。
它的问世PyPI上的文件,魔术和在Debian为蟒蛇魔法 。 对我来说,这个库是最好用的,因为它是可用的PyPI上和在Debian(和其他可能的分布),使得部署软件的过程更容易。 我的博客上讲述如何使用它 ,也。
对于较新的子库,您现在可以使用下面的代码(* 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
在图像的情况下,你可以使用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
仅适用于Linux,但使用“sh”的Python模块,你可以简单地调用任何shell命令
https://pypi.org/project/sh/
PIP安装SH
进口SH
sh.file( “/根/文件”)
输出:/根目录/文件:ASCII文本