Apa perintah os Python 3 untuk membuat file data yang dapat ditulis dan jalur C-Drive untuk Aplikasi Windows 10 pada umumnya?

Apa perintah os Python 3 untuk membuat "file data yang dapat ditulis dan jalur C-Drive" untuk Aplikasi Windows 10 pada umumnya. Ada beberapa bagian dari pertanyaan ini:

  1. Program Python 3 saya membuat (beberapa) file data sebagai bagian dari tujuannya. Ketika penginstal MSI saya menginstal ke/Program, executable Python saya tidak memiliki izin untuk membuat dan menulis file data. Jadi, bagian pertama dari pertanyaan saya adalah: Apakah saya perlu mengubah program Python 3 saya untuk membuat file data di direktori tertentu (menggunakan kemampuan os) dan dapatkah Anda memberi saya sebuah contoh.

  2. Bagian kedua dari pertanyaan saya hanyalah: Opsi perintah os apa yang dapat membantu saya menemukan direktori windows 10 pada PC Windows 10 umum (misalnya jalur beranda, jalur AppData, dll).

  3. Perhatikan bahwa saya cx_Freezing ke penginstal MSI, jadi semuanya harus diotomatisasi untuk instalasi jarak jauh biasa dari cloud (google drive atau GitHub) oleh penginstal MSI, jadi ingatlah hal itu saat menjawab 1 dan 2 di atas.

Perhatian: Ini adalah Penginstal MSI untuk program ini: Aplikasi Manajemen Kontak WINDOWS 10 Baru.

https://drive.google.com/drive/folders/0Bz98wvqqw-1QRUNFcUJLU21yT1k

Terima kasih sebelumnya atas pengetahuan dan pengalaman pemrograman Anda.

Saya menghargai bantuan teknis dan klarifikasi Anda.


person Michael Hughes    schedule 24.09.2017    source sumber


Jawaban (1)


Saya menyarankan agar Anda menghindari menyimpan file dan direktori secara langsung di folder profil pengguna (yaitu variabel lingkungan UserProfile) atau folder rumah (yaitu "%HomeDrive%%HomePath%"). Ini berbeda dari praktik umum di Unix untuk direktori home (jika kita mengabaikan spesifikasi direktori dasar XDG), namun saat berada di Redmond, lakukan seperti yang dilakukan Microsofties.

Buat folder dengan nama unik untuk aplikasi di satu atau beberapa lokasi berikut: folder data lokal (per pengguna), folder data roaming (per pengguna), atau folder data program (per mesin). Perhatikan bahwa folder-folder ini disembunyikan secara default karena umumnya pengguna tidak dimaksudkan untuk mengaksesnya secara langsung.

Gunakan folder data lokal untuk cache. Gunakan folder data roaming untuk data pengguna dan konfigurasi stateful. Gunakan folder data program untuk data dan cache yang tidak spesifik untuk pengguna. Misalnya, program seperti pip dapat menggunakan folder data program untuk menyimpan cache paket yang diunduh. (Dalam praktiknya, pip menyimpan cache paket per pengguna, namun pada prinsipnya dapat melakukan cache per mesin.)

Jika aplikasi Anda menggunakan folder data program, pastikan folder tersebut memberikan izin kepada semua pengguna untuk menambah dan mengubah subfolder dan file. Jika Anda malas membuat folder, Anda dapat menambahkan izin secara manual. Lihat jawaban ini untuk contoh cara mengubah keamanan file.

Variabel lingkungan untuk folder lokal, roaming, dan data program masing-masing adalah LocalAppData, AppData dan ProgramData. Di Windows XP yang terakhir adalah "%AllUsersProfile%\Application Data", dan mungkin "Data Aplikasi" dilokalkan. Umumnya Anda tidak boleh menggunakan variabel lingkungan ini dalam aplikasi.

Karena sebagian besar folder yang dikenal/khusus mudah dipindahkan di Explorer, yang terbaik adalah menanyakan jalur saat ini pada shell dengan memanggil SHGetFolderPath atau fungsi SHGetKnownFolderPath yang lebih baru daripada menggunakan variabel lingkungan dan lokasi default. Anda dapat menggunakan ctypes untuk ini jika Anda ingin tetap berada dalam perpustakaan standar Python. Namun lebih mudah menggunakan PyWin32, yang dapat diinstal pip sebagai paket "pypiwin32".

Berikut adalah beberapa GUID Folder yang Dikenal untuk data, dokumen, dan file media:

            User                    System
ProgramData                         FOLDERID_ProgramData
Local       FOLDERID_LocalAppData
Roaming     FOLDERID_RoamingAppData
Desktop     FOLDERID_Desktop        FOLDERID_PublicDesktop
Documents   FOLDERID_Documents      FOLDERID_PublicDocuments
Downloads   FOLDERID_Downloads      FOLDERID_PublicDownloads
Music       FOLDERID_Music          FOLDERID_PublicMusic
Pictures    FOLDERID_Pictures       FOLDERID_PublicPictures
Videos      FOLDERID_Videos         FOLDERID_PublicVideos

Berikut adalah konstanta CSIDL yang terkait, kecuali tidak ada satu pun untuk "Unduhan":

            User                    System
ProgramData                         CSIDL_COMMON_APPDATA
Local       CSIDL_LOCAL_APPDATA
Roaming     CSIDL_APPDATA
Desktop     CSIDL_DESKTOP           CSIDL_COMMON_DESKTOPDIRECTORY
Documents   CSIDL_PERSONAL          CSIDL_COMMON_DOCUMENTS
Music       CSIDL_MYMUSIC           CSIDL_COMMON_MUSIC
Pictures    CSIDL_MYPICTURES        CSIDL_COMMON_PICTURES
Videos      CSIDL_MYVIDEO           CSIDL_COMMON_VIDEO

SHGetKnownFolderPath tidak dibungkus oleh PyWin32. Saya punya jawaban lain yang memanggilnya melalui ctypes. Alternatifnya, Anda dapat menggunakan PyWin32 untuk membuat instance KnownFolderManager. Misalnya:

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()

Atau panggil fungsi SHGetFolderPath lama dengan konstanta CSIDL. Misalnya:

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)
person Eryk Sun    schedule 24.09.2017
comment
Saya sangat menghargai jawaban rinci eryksun ini. Jawaban ini akan sangat membantu banyak Pengembang Windows 10 Python 3. Stackoverflow adalah sumber solusi yang sangat baik, terutama bagi pengembang yang mempelajari dasar-dasar platform umum seperti Windows 10. - person Michael Hughes; 12.10.2017