Python 程序中的设置文件位置

问题描述 投票:0回答:2

我正在完成一个用 Python 编写的程序,以确保它是跨平台的。最后一个障碍是保存会话历史记录等持久数据。在 Windows 中,文件将保存在用户配置文件的

AppData\Local
文件夹下,在 MacOS 上,嗯...我不知道,在 Linux 上...这取决于情况。

这种情况下的最佳做法是什么?是否有一个库可以为运行应用程序的平台返回推荐的最佳实践位置?

python persistence file-management
2个回答
2
投票

基于 @DarkKnight 的隐式确认,即没有 Python 模块返回基于每个平台的首选位置(并假设 MacOS 遵循 Linux 系统标准),我使用以下代码:

import sys
import os

def app_folder(prog: str) -> str:
    def createFolder(directory):
        try:
            if not os.path.exists(directory):
                os.makedirs(directory)
        except OSError:
            raise

    if sys.platform == "win32":
        folder = os.path.join(os.path.expanduser("~"), "AppData", "Local", prog)
        createFolder(folder)
        return folder
    else:
        folder = os.path.join(os.path.expanduser("~"), "." + prog)
        createFolder(folder)
        return folder

(注意:我可能不会冒任何风险将

\
/
作为文件夹分隔符而不是使用
os.path.join()
,因为它已经特定于每个平台,但我只是喜欢使用可以重用的代码,甚至一行一行。)


1
投票

使用您的文件夹名称更改子目录变量,它将检查所有 3 个操作系统并创建文件夹(如果尚不存在)并打印文件夹路径。

import platform
from pathlib import Path


# check the os of pc
MACOS, LINUX, WINDOWS = (platform.system() == x for x in ['Darwin', 'Linux', 'Windows'])   

#name whatever you want to use for your application
sub_dir = "example_app"

# Return the appropriate config directory for each operating system
if WINDOWS:
    path = Path.home() / 'AppData' / 'Local' / sub_dir
elif MACOS:  # macOS
    path = Path.home() / 'Library' / 'Application Support' / sub_dir
elif LINUX:
    path = Path.home() / '.config' / sub_dir
else:
    raise ValueError(f'Unsupported operating system: {platform.system()}')

# Create the subdirectory if it does not exist
path.mkdir(parents=True, exist_ok=True)

print(path)

© www.soinside.com 2019 - 2024. All rights reserved.