在Python中设置文件属性

2 投票
2 回答
10200 浏览
提问于 2025-04-17 22:48

在文件管理器(无论是Linux还是Windows)中,我可以右键点击一个文件,然后查看它的属性。我想用Python来设置这些属性,但看起来有点复杂。通过使用os.stat(file)我可以获取一些标准的文件属性,但我无法设置(自定义的)属性。对于C#,有一个解决方案可以获取元数据字段,链接在这里:Retrieve metadata column feilds;对于VisualBasic,也有一个方法可以用VBScript添加自定义属性,链接在这里:How do I add a custom property to a file using VBScript,但我找不到任何关于Python的解决方案。非常感谢你的帮助。Python是多功能的,所以我本来期待:

 setattr(file, property_name, property_value) 

但这个方法并不奏效。

2 个回答

-2

不要试图在Python中为文件设置元数据。因为即使可以做到,复制文件时可能会丢失这些元数据,具体可以查看这个链接。这意味着使用元数据会导致一些不可预测的结果,这样不好。与其让事情变得不可预测,不如干脆就不可能。

解决方法: 我创建了一个额外的文本文件meta.txt,并使用以下方法将这些文件归档:

shutil.make_archive

这看起来并不好。但这个归档文件可以被复制,而不会丢失元数据。当解压缩时,所有文件的元数据都可以访问。

0

可以看看这个回答

通过一些模块,你可以像@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等,可以从这里下载。我不太确定pywin32是否有专门的文档,但这类模块通常是微软API的封装,比如VBA或C#。所以根据我在办公软件方面的经验,通常很容易在微软的C#文档中找到答案。这可能会帮助你设置任何文件的属性。

撰写回答