什么是Python 3 os命令来建立;“可写数据文件和C驱动器路径”;对于典型的Windows 10应用程序

什么是Python 3 os命令来建立;“可写数据文件和C驱动器路径”;对于典型的Windows 10应用程序,windows,python-3.x,filesystems,windows-installer,Windows,Python 3.x,Filesystems,Windows Installer,为典型的Windows 10应用程序建立“可写数据文件和C驱动器路径”的Python 3 os命令有哪些。这个问题有几个部分: 我的Python3程序创建(多个)数据文件作为其用途的一部分。当我的MSI安装程序安装到/程序中时,我的Python可执行文件没有创建和写入数据文件的权限。因此,我问题的第一部分是:我是否需要更改Python3程序以在特定目录中创建数据文件(使用操作系统功能),您能给我举个例子吗 我问题的第二部分很简单:什么操作系统命令选项可以帮助我发现普通windows 10 PC的

为典型的Windows 10应用程序建立“可写数据文件和C驱动器路径”的Python 3 os命令有哪些。这个问题有几个部分:

  • 我的Python3程序创建(多个)数据文件作为其用途的一部分。当我的MSI安装程序安装到/程序中时,我的Python可执行文件没有创建和写入数据文件的权限。因此,我问题的第一部分是:我是否需要更改Python3程序以在特定目录中创建数据文件(使用操作系统功能),您能给我举个例子吗

  • 我问题的第二部分很简单:什么操作系统命令选项可以帮助我发现普通windows 10 PC的windows 10目录(例如主路径、AppData路径等)

  • 请注意,我正在安装MSI安装程序,因此MSI安装程序必须自动从云(google drive或GitHub)进行典型的远程安装,因此在回答上述1和2时请记住这一点

  • 注意:以下是此程序的MSI安装程序: 新的WINDOWS 10联系人管理应用程序

    提前感谢您的编程知识和经验


    感谢您的技术帮助和澄清。

    我建议您避免将文件和目录直接存储在用户配置文件文件夹(即
    UserProfile
    环境变量)或主文件夹(即
    %HomeDrive%%HomePath%”
    )中。这不同于Unix中主目录的常见做法(如果我们忽略XDG基本目录规范),但在Redmond中,请按照Microsofties的操作

    在以下一个或多个位置为应用程序创建唯一命名的文件夹:本地数据文件夹(每用户)、漫游数据文件夹(每用户)或程序数据文件夹(每台计算机)。请注意,这些文件夹在默认情况下是隐藏的,因为通常用户不打算直接访问它们

    使用本地数据文件夹进行缓存。将漫游数据文件夹用于有状态用户数据和配置。将程序数据文件夹用于非特定于用户的数据和缓存。例如,像pip这样的程序可以使用ProgramData文件夹来缓存下载的包。(实际上,pip为每个用户缓存包,但原则上它可以为每台机器缓存包。)

    如果应用程序使用程序数据文件夹,请确保该文件夹授予所有用户添加和修改子文件夹和文件的权限。如果延迟创建文件夹,则可以手动添加权限。有关如何修改文件安全性的示例,请参见

    本地、漫游和程序数据文件夹的环境变量分别为
    LocalAppData
    AppData
    ProgramData
    。在Windows XP中,后者是
    “%AllUsersProfile%\Application Data”
    ,可能“Application Data”是本地化的。通常,您不应该在应用程序中使用这些环境变量

    由于大多数已知/特殊文件夹都可以在资源管理器中轻松重新定位,因此最好通过调用
    SHGetFolderPath
    或更新的
    shGetKnowlderPath
    函数,而不是使用环境变量和默认位置,向shell询问当前路径。如果需要保持在Python的标准库中,可以使用ctypes来实现这一点。但是使用PyWin32更容易,它可以作为“pypiwin32”包安装在pip上

    以下是一些用于数据、文档和媒体文件的GUI:

    用户系统
    ProgramData FOLDERID_ProgramData
    本地FOLDERID\u LocalAppData
    漫游FOLDERID\u漫游应用数据
    桌面文件夹\u桌面文件夹\u公共桌面
    文档FOLDERID_文档FOLDERID_公共文档
    下载FOLDERID_下载FOLDERID_公开下载
    音乐民俗音乐民俗公共音乐
    图片FOLDERID_图片FOLDERID_公共图片
    视频FOLDERID_视频FOLDERID_公共视频
    
    以下是相应的
    CSIDL
    常量,除了没有用于“下载”的常量外:

    用户系统
    ProgramData CSIDL_COMMON_APPDATA
    本地CSIDL\u本地\u应用数据
    漫游CSIDL_应用数据
    桌面CSIDL\u桌面CSIDL\u公用桌面目录
    文档CSIDL\u个人CSIDL\u通用文档
    音乐CSIDL\u我的音乐CSIDL\u普通音乐
    图片CSIDL\u MYPICTURES CSIDL\u COMMON\u图片
    视频CSIDL_MYVIDEO CSIDL_COMMON_视频
    
    SHGetKnownFolderPath
    未被PyWin32包装。我通过ctypes调用它。或者,您可以使用PyWin32创建实例。例如:

    import pythoncom
    from win32com.shell import shell
    
    kf_mgr = pythoncom.CoCreateInstance(shell.CLSID_KnownFolderManager, None, 
                pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IKnownFolderManager)
    
    downloads_path = kf_mgr.GetFolder(shell.FOLDERID_Downloads).GetPath()
    
    from win32com.shell import shell, shellcon
    
    SHGFP_TYPE_CURRENT = 0
    SHGFP_TYPE_DEFAULT = 1
    
    local_data_path = shell.SHGetFolderPath(None, shellcon.CSIDL_LOCAL_APPDATA, 
                        None, SHGFP_TYPE_CURRENT)
    
    或者使用
    CSIDL
    常量调用传统的
    SHGetFolderPath
    函数。例如:

    import pythoncom
    from win32com.shell import shell
    
    kf_mgr = pythoncom.CoCreateInstance(shell.CLSID_KnownFolderManager, None, 
                pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IKnownFolderManager)
    
    downloads_path = kf_mgr.GetFolder(shell.FOLDERID_Downloads).GetPath()
    
    from win32com.shell import shell, shellcon
    
    SHGFP_TYPE_CURRENT = 0
    SHGFP_TYPE_DEFAULT = 1
    
    local_data_path = shell.SHGetFolderPath(None, shellcon.CSIDL_LOCAL_APPDATA, 
                        None, SHGFP_TYPE_CURRENT)
    

    我真的很感激这个详细的回答。这个答案将对许多Windows10Python3开发人员非常有帮助。Stackoverflow是一个很好的解决方案来源,特别是对于在Windows 10等通用平台上学习基础知识的开发人员来说。