2009-07-05 8 views
39

मेरे पास एक पायथन डेस्कटॉप एप्लिकेशन है जिसे उपयोगकर्ता डेटा स्टोर करने की आवश्यकता है। विंडोज़ पर, यह आमतौर पर %USERPROFILE%\Application Data\AppName\ में होता है, ओएसएक्स पर यह आमतौर पर ~/Library/Application Support/AppName/ होता है, और अन्य * निक्स पर यह आमतौर पर ~/.appname/ होता है।मैं पाइथन के लिए क्रॉस प्लेटफ़ॉर्म तरीके में डेस्कटॉप एप्लिकेशन डेटा कैसे संग्रहीत करूं?

मानक लाइब्रेरी में एक फ़ंक्शन मौजूद है, os.path.expanduser जो मुझे उपयोगकर्ता की होम निर्देशिका प्राप्त करेगा, लेकिन मुझे पता है कि विंडोज़ पर, कम से कम, "एप्लिकेशन डेटा" उपयोगकर्ता की भाषा में स्थानीयकृत है। यह ओएसएक्स के लिए भी सच हो सकता है।

इस स्थान को पाने का सही तरीका क्या है?

अद्यतन: कुछ आगे अनुसंधान इंगित करता है कि पर OSX इस प्राप्त करने के लिए सही तरीका समारोह NSSearchPathDirectory का उपयोग करना है, लेकिन यह है कि कोको है, इसलिए इसे PyObjC पुल बुला मतलब है ...

उत्तर

39

ठीक है, मुझे अपने प्रश्न का उत्तर देने के लिए कोई भी नफरत है, लेकिन किसी और को पता नहीं है। मैं वंशावली के लिए जवाब छोड़ रहा हूँ।

APPNAME = "MyApp" 
import sys 
from os import path, environ 
if sys.platform == 'darwin': 
    from AppKit import NSSearchPathForDirectoriesInDomains 
    # http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSearchPathForDirectoriesInDomains 
    # NSApplicationSupportDirectory = 14 
    # NSUserDomainMask = 1 
    # True for expanding the tilde into a fully qualified path 
    appdata = path.join(NSSearchPathForDirectoriesInDomains(14, 1, True)[0], APPNAME) 
elif sys.platform == 'win32': 
    appdata = path.join(environ['APPDATA'], APPNAME) 
else: 
    appdata = path.expanduser(path.join("~", "." + APPNAME)) 
+20

http://pypi.python.org/pypi/appdirs/1.2.0 – tkone

+1

में देखा करने के लिए डार्विन सामान लिनक्स के लिए बढ़िया है है आपको वास्तव में एक्सडीजी पथ का उपयोग करना चाहिए। – abergmeier

+3

हार्ड कोडिंग "14" और "1" से बचने के लिए, यह बेहतर काम करता है: 'ऐपकिट आयात से NSSearchPathForDirectoriesInDomains, NSApplicationSupportDirectory, NSUserDomainMask' –

1

खैर के लिए, विंडोज एपडाटा (पर्यावरण चर) उपयोगकर्ता के "एप्लिकेशन डेटा" फ़ोल्डर को इंगित करता है। हालांकि, ओएसएक्स के बारे में निश्चित नहीं है।

सही राय, मेरी राय में, प्रति प्लेटफार्म आधार पर करना है।

5

आप क्यूटी से QSettings का उपयोग करने का प्रयास कर सकते हैं। आप अपने MyCompany/MyApp.ini फाइल करने के लिए इस तरह से पथ प्राप्त कर सकते हैं:

from PySide.QtCore import QSettings, QCoreApplication 

QSettings.setDefaultFormat(QSettings.IniFormat) 
QCoreApplication.setOrganizationName("MyCompany") 
QCoreApplication.setApplicationName("MyApp") 
settings = QSettings() 
print(settings.fileName()) 

वैकल्पिक रूप से, किसी भी वैश्विक राज्य बदले बिना:

C:\Users\MyUser\AppData\Roaming\MyCompany\MyApp.ini
:

QSettings(
    QSettings.IniFormat, QSettings.UserScope, 
    "MyCompany", "MyApp" 
).fileName() 

Win7 पर आप की तरह कुछ मिलता है

लिनक्स पर (भिन्न हो सकता है):

/home/myuser/.config/MyCompany/MyApp.ini

मुझे ओएसएक्स के लिए संभावित परिणाम नहीं पता (लेकिन मैं चाहता हूं)।

QSettings functionallity जब तक आप registerFormat, जो PySide में उपलब्ध नहीं है का उपयोग करना चाहते अच्छा होने लगते हैं, इसलिए वहाँ कोई आसान तरीका सेटिंग्स के लिए YAML या JSON लेखकों का प्रयोग है।

संबंधित मुद्दे

 संबंधित मुद्दे