【问题标题】:Set file properties in Python在 Python 中设置文件属性
【发布时间】:2014-04-23 23:54:41
【问题描述】:

在 Filemanager(Linux 和 Windows)中,我可以右键单击文件并查看其属性。我想使用 Python 设置它们。看起来很复杂。使用 os.stat(file) 我可以检索标准文件属性,但我不能设置(自定义)属性。对于 C# Retrieve metadata column feilds 和 VisualBasic How do I add a custom property to a file using VBScript 似乎有一个解决方案,但我找不到任何适用于 Python 的解决方案。非常感谢您的帮助。 Python 是多态的,所以我希望:

 setattr(file, property_name, property_value) 

但这不起作用。

【问题讨论】:

  • 您能否提供一个您想要设置的非标准文件属性的示例?
  • 描述、版本、有效等。我正在构建一个 Sanity_check 来检查是否满足特定程序的所有必需资源。它是一种日志文件,但是可以在程序中再次读取结果,并且可以比较差异。文件量可能与日志文件一样大。数据文件(pickle)必须具有描述性信息,因此用户知道他拥有特定类型的 sanity_check 的正确文件。
  • 不要将相关信息放在 cmets 中。 edit你的问题,而不是
  • 您需要访问不是您自己创建的属性吗?
  • 会有用,没必要。

标签: python linux file polymorphism


【解决方案1】:

查看this answer

您可以通过一些模块进行更改,例如@Claudiu 解决方案的创建时间:

import pywintypes, win32file, win32con
def changeFileCreationTime(fname, newtime):
    wintime = pywintypes.Time(newtime)
    winfile = win32file.CreateFile(
        fname, win32con.GENERIC_WRITE,
        win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
        None, win32con.OPEN_EXISTING,
        win32con.FILE_ATTRIBUTE_NORMAL, None)

    win32file.SetFileTime(winfile, wintime, None, None)

    winfile.close()

pywin32,包括 pywintypes 等,可从here 获得。我不确定是否有 pywin32 的特定文档,但这些类型的模块通常是 MS API 的包装器,例如对于 VBA 或 C#。所以通常很容易在 e.g. 中找到答案。 MS C# 文档(基于我对办公应用程序的经验)。这可能会帮助您设置任意文件属性。

【讨论】:

  • 谢谢,但所有操作系统都需要它。如果只有一个特定的操作系统是可能的,那么我需要 Linux。我看到我错误地添加了一个 windows 标签。我刚刚删除了 windows 标签。
  • 不用担心。我不经常使用 Linux,但我相信它有许多命令行工具可以满足您的需求。例如。 'touch' 改变上次访问的日期。你可以从 Python 运行它
  • 它有,我试过看到askubuntu.com/questions/435981/…,但没有成功。最重要的是我想限制依赖。使用 OLE 对象来调用 attr 会产生难以维护的不良和不可预测的依赖关系。
【解决方案2】:

不要尝试在 Python 中为文件设置元数据。因为即使有可能,复制文件也可能会丢失元数据,请参阅http://docs.python.org/3/library/shutil.html#module-shutil 这意味着使用元数据将导致不可预知的结果。哪个不好。更好的事情是根本不可能,然后是不可预测的。

解决方法: 我创建了一个附加文本文件 meta.txt 并使用以下文件归档了这些文件:

shutil.make_archive

一点都不漂亮。但是可以复制此存档文件,而不会丢失元数据。取消归档后,文件的所有元数据都可以访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多