【问题标题】:Get file kind (not extension) on MacOSX file system with Python使用 Python 在 MacOSX 文件系统上获取文件类型(不是扩展名)
【发布时间】:2018-10-13 09:36:35
【问题描述】:

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

我想要访问的最重要的属性是文件“种类”。请注意,我说的不是扩展,而是下面屏幕截图中的第 4 列(取自 this SuperUser question)。例如,当我遍历此目录中的这些文件时,如何获得“纯文本文档”作为 license.txt 的类型?我的应用程序是一个文件处理脚本,应该从 keynote/pages/numbers 包文件中识别目录。

关于重复的说明:

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

【问题讨论】:

  • 如果您只是想区分普通文件和目录,请参阅os.path.isfileos.path.isdir。另见Path.is_dir
  • @PM2Ring 我不确定如何使用您发送给我的那篇 SO 文章来实现我的特定目的——这需要一些时间才能弄清楚。 os.path.isfileos.path.isdir 不起作用,因为我使用的包文件被错误地视为目录,我想处理这些类型的文件而不是实际目录,所以我不得不依赖文件类型。
  • 抱歉,我对 MacOSX 不太熟悉。 file 是一个标准的 *nix 命令,你可以阅读它here。我假设 Mac 有 file,尽管 Mac 在处理文件的方式上做了一些“特殊”的事情。

标签: python macos operating-system filesystems


【解决方案1】:

您可以从 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))

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 2016-09-26
    • 2018-11-12
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2010-11-05
    相关资源
    最近更新 更多