在Python中设置文件属性

时间:2014-03-18 10:47:48

标签: python linux file polymorphism

在Filemanager(Linux和Windows)中,我可以右键单击文件并查看其属性。我想用Python设置它们。这似乎很复杂。使用os.stat(文件)我可以检索标准文件属性,但我无法设置(自定义)属性。对于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) 

但这不起作用。

2 个答案:

答案 0 :(得分: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#。因此,通常很容易在例如找到答案中找到答案。 MS C#docs(基于我对办公应用程序的经验)。这可能有助于您设置任意文件属性。

答案 1 :(得分:0)

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

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

shutil.make_archive

根本不漂亮。但是可以复制此归档文件,而无需更改丢失元数据。未归档时,可以访问文件的所有元数据。