99 votes

Comment trouver le répertoire principal de l'utilisateur réel en utilisant Python ?

Je vois que si nous changeons la variable d'environnement HOME (linux) ou USERPROFILE (windows) et exécutons un script python, il renvoie la nouvelle valeur comme le répertoire personnel de l'utilisateur lorsque j'essaie

os.environ['HOME']
os.exp

Y a-t-il un moyen de trouver le répertoire personnel réel de l'utilisateur sans dépendre de la variable d'environnement?

edit:
Voici un moyen de trouver le répertoire utilisateur sous Windows en lisant la base de registre,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

edit:
Un moyen de trouver le répertoire d'accueil de Windows en utilisant pywin32,

from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)

115voto

Felix Kling Points 247451

Je pense que os.path.expanduser(chemin) pourrait être utile.

Sous Unix et Windows, renvoie l'argument avec un composant initial de ~ ou ~utilisateur remplacé par le répertoire utilisateur de cet utilisateur.

Sous Unix, un ~ initial est remplacé par la variable d'environnement HOME si elle est définie; sinon le répertoire utilisateur actuel est recherché dans le répertoire des mots de passe à travers le module intégré pwd. Un ~utilisateur initial est recherché directement dans le répertoire des mots de passe.

Sous Windows, HOME et USERPROFILE seront utilisés s'ils sont définis, sinon une combinaison de HOMEPATH et HOMEDRIVE sera utilisée. Un ~utilisateur initial est géré en supprimant le dernier composant de répertoire du chemin utilisateur créé ci-dessus.

Si l'expansion échoue ou si le chemin ne commence pas par un tilde, le chemin est renvoyé inchangé.

Donc vous pourriez simplement faire:

os.path.expanduser('~utilisateur')

38voto

Julius Kunze Points 55
from pathlib import Path

str(Path.home())

fonctionne en Python 3.5 et versions ultérieures. Path.home() renvoie un objet Path fournissant une API que je trouve très utile.

18voto

Brian M. Hunt Points 12506

Je pense que os.path.expanduser(chemin) est la meilleure réponse à votre question, mais il y a une alternative qui pourrait valoir la peine d'être mentionnée dans le monde Unix : le pwd package. Par exemple.

import os, pwd

pwd.getpwuid(os.getuid()).pw_dir

6voto

home_folder = os.getenv('HOME')

Cela devrait fonctionner également sur Windows et Mac OS, fonctionne bien sur Linux.

6voto

khawarizmi Points 160

Pour windows;

import os
homepath = os.path.expanduser(os.getenv('USERPROFILE'))

vous donnera un accès au répertoire personnel de l'utilisateur actuel et

filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt'

vous donnera un accès au fichier ci-dessous;

C:\Users\nomUtilisateur\Documents\myfile.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X