使用Python在MacOSX文件系统上获取文件类型(不是扩展名)

时间:2018-05-03 07:03:57

标签: python macos operating-system filesystems

哪些python库可用于在MacOSX文件系统上获取详细的文件属性?我有预感它使用os模块,但我无法通过python访问这些属性。

我想访问的最重要的属性是文件' kind'。请注意,我不是在讨论扩展程序,而是在下面的屏幕截图中的第4列(取自this SuperUser question)。例如,当我遍历这个目录中的这些文件时,我怎样才能获得"纯文本文档"作为license.txt的那种?我的应用程序是一个文件处理脚本,应该从主题演讲/页面/数字包文件中识别目录。

关于重复的说明:

另请注意,我已经看到了particular SO question,这与一般的* nix文件系统有关。我的问题是MacOS文件系统的这个问题的一个子集,可能有一些在该问题中未讨论的特性。如果用户可以提供 HOW python-magic的示例,可用于获取文件类型,那么这将提供比上述文章更有用的解决方案。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以从os.stat()获取最后修改日期和文件大小。

文件类型更复杂,因为至少有两种不同的方法可以从操作系统中获取人类可读的描述。为此,您需要的库是pyobjc,它允许您a)查询NSWorkspace和LaunchServices以获取UTI相关数据,或b)为单个文件创建NSURL并查询它们的资源类型。我相信b)更接近Finder的作用。

以下是一个说明这两种方法的示例:

from AppKit import NSWorkspace
from LaunchServices import UTTypeCopyDescription

from Cocoa import NSURL, NSURLLocalizedTypeDescriptionKey

from datetime import datetime
import os

for f in os.listdir("."):
    uti = NSWorkspace.sharedWorkspace().typeOfFile_error_(f, None)[0]
    desc = UTTypeCopyDescription(uti)

    url = NSURL.fileURLWithPath_(f)
    urlType = url.getResourceValue_forKey_error_(None, NSURLLocalizedTypeDescriptionKey, None)[1]

    sr = os.stat(f)
    size = sr.st_size
    date = datetime.fromtimestamp(sr.st_mtime).strftime('%Y-%m-%d %H:%M:%S')

    print("%-20s size=%s modified=%s uti=%s desc=%s url=%s" % (f, size, date, uti, desc, urlType))