windows 如何在python中查找文件类型的名称

r7xajy2e  于 2022-12-05  发布在  Windows
关注(0)|答案(2)|浏览(170)

我试图使用tkinter在python中创建windows 10文件资源管理器的克隆,但我无法找到如何从文件扩展名like file explorer does中获取文件类型的名称
我已经得到了一个功能,以获得程序的文件扩展名和另一个打开它在默认的应用程序,但没有在线有一个解决方案,我的问题

ljsrvy3e

ljsrvy3e1#

该值存储在寄存器中的位置_HKEY_LOCAL_MACHINE\SOFTWARE\Classes。例如,该位置的键 Python.File 的值为 Python File
第一步是获取与文件的 * 人类可读 * 名称相关联的键名。该键名是键名的值,作为位于同一路径的扩展名。然后,由于该值,通过键名获取文件的名称。
用一个例子来总结:\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py给出 *Python.文件 * \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File给出 *Python文件 *
在python中,要获取注册表中的值,可以使用 winreg package。

from typing import Tuple
from winreg import HKEYType, ConnectRegistry, HKEY_LOCAL_MACHINE, OpenKey, QueryValueEx

class ExtensionQuery:
    def __init__(self):
        self.base: str = r"SOFTWARE\Classes"
        self.reg: HKEYType = ConnectRegistry(None, HKEY_LOCAL_MACHINE)

    def _get_value_from_class(self, class_str: str) -> str:
        path: str = fr"{self.base}\{class_str}"
        key: HKEYType = OpenKey(self.reg, path)
        value_tuple: Tuple[str, int] = QueryValueEx(key, "")
        return value_tuple[0]

    def get_application_name(self, ext: str) -> str:
        return self._get_value_from_class(self._get_value_from_class(ext))

query = ExtensionQuery()
print(query.get_application_name(".py"))
swvgeqrz

swvgeqrz2#

我的猜测是微软使用字典来做到这一点。
我也建议这样做:

def get_file_type():
    extension_full_names = {".txt":"Text file", ".py":"Python file"}

    file_extension = getFileExtension(file)
    
    if file_extension in extension_full_names.keys():
       return extension_full_names[file_extension]
    
    return f"{file_extension} file" # extension not in your dictionary

相关问题