如何检查python中没有扩展名的文件类型?

问题描述 投票:65回答:9

我有一个充满文件的文件夹,而这些文件没有扩展名。如何检查文件类型?我想检查文件类型并相应地更改文件名。假设函数filetype(x)返回的文件类型为png。我想这样做:

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

我该怎么做?

python filesystems identification
9个回答
71
投票

[有些Python库可以根据文件的内容(通常是标头/幻数)识别文件,并且不依赖文件名或扩展名。

如果要处理许多不同的文件类型,则可以使用python-magic。那只是完善的python-magic库的Python绑定。在我的有限使用中,它具有良好的声誉和(很少认可),它是可靠的。

还有一些用于更专业文件类型的库。例如,Python标准库具有magic模块,仅对图像文件类型执行相同的操作。


54
投票

imghdr库提供了您需要的功能。

您可以使用imghdr安装该库,并按以下方式使用它:

Python Magic

在这种情况下,Python代码正在调用内部的pip install python-magic,该库与* NIX >>> 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' 命令使用的库相同。因此,这与基于子进程/基于shell的答案具有相同的作用,但没有开销。


10
投票

在UNIX和Linux上,有libmagic命令来猜测文件类型。甚至还有file

file

文件会测试每个参数以尝试对其进行分类。有三种按此顺序执行的测试集:文件系统测试,幻数测试和语言测试。第一个成功的测试导致要打印的文件类型。

您需要使用file模块运行windows port命令,然后解析结果以找出扩展名。

edit:忽略我的答案。请改用Chris Johnson的man page


7
投票
file

正如史蒂文指出的,subprocess是方法。您可以通过上面的方式获取命令输出,如[answer说]]


6
投票

您还可以为Python安装官方的import subprocess p = sub.Popen('file yourfile.txt',stdout=sub.PIPE,stderr=sub.PIPE) output, errors = p.communicate() print output 绑定,这是一个名为subprocess的库(它不使用ctypes,例如post)。


4
投票

使用更新的子流程库,您现在可以使用以下代码(*仅nix解决方案):


4
投票

对于图像,可以使用imghdr模块。


1
投票

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


0
投票

您也可以使用此代码(由头文件的3个字节组成的纯python):

© www.soinside.com 2019 - 2024. All rights reserved.