วิธีรับโฮมไดเร็กทอรีใน Python


934

ฉันต้องการรับตำแหน่งของโฮมไดเร็กทอรีของผู้ใช้ที่ล็อกออนปัจจุบัน ขณะนี้ฉันใช้สิ่งต่อไปนี้บน Linux:

os.getenv("HOME")

อย่างไรก็ตามสิ่งนี้ใช้ไม่ได้กับ Windows วิธีการข้ามแพลตฟอร์มที่ถูกต้องในการทำเช่นนี้คืออะไร?


2
นี่ถูกทำเครื่องหมายว่าซ้ำกับวิธีค้นหาโฮมไดเร็กทอรีของผู้ใช้จริงโดยใช้ pythonแต่ฉันโหวตให้เปิดใหม่เพราะคำตอบนี้ใช้ได้กับ Python 3 และคำตอบที่เก่ากว่าไม่ทำ
Dour High Arch

คำตอบ:


1677

คุณต้องการที่จะใช้os.path.expanduser
สิ่งนี้จะช่วยให้มั่นใจได้ว่ามันทำงานได้บนทุกแพลตฟอร์ม

from os.path import expanduser
home = expanduser("~")

หากคุณใช้Python 3.5+คุณสามารถใช้pathlib.Path.home () :

from pathlib import Path
home = str(Path.home())

48
ควรสังเกตว่าหากผู้ใช้ล็อกออนเข้าสู่โดเมนบน windows และตั้งโฟลเดอร์หลักของโปรไฟล์ไว้ในไดเรกทอรีที่ใช้งานอยู่สิ่งนี้จะรายงานว่าโฟลเดอร์เครือข่ายที่แมปแทนไดเรกทอรีภายในเครื่อง
scape

7
pathlib.Path.home()สามารถใช้ได้จาก Python3.5 เป็นต้นไป ( docs.python.org/3/library/pathlib.html#pathlib.Path.home )
อีวานเดอลาปาซ Centeno

9
ฉันสงสัยว่าทำไมไม่มีใครพูดถึงคำถามนี้ในคำถามนี้ แต่ถ้าคุณต้องการทราบว่าโฮมไดเร็กทอรีของผู้ใช้รายอื่นอยู่ที่ไหนคุณสามารถos.path.expanduser('~username')ใช้ได้ อาจใช้ได้กับ Linux เท่านั้น
สูงสุด

2
@Dipayan ไม่นั่นคือ Python 2 backport ของ pathlib สำหรับ Python 3 pathlib ถูกต้อง
Haystack

2
ผลลัพธ์ก็เหมือนกัน หากโดยทั่วไปคุณกำลังทำงานกับ pathlib คุณอาจต้องการโซลูชัน pathlib (และละเว้นการเรียกstr) หากคุณต้องการให้พา ธ เป็นสตริงทั้งคู่ก็ทำเช่นเดียวกัน
Niklas Mertsch

-19

นี่คือวิธี linux cd .. หากคุณต้องการใช้แทนหมายเหตุ: (หากคุณอยู่ในไดเรกทอรีย่อยจะนำไปที่ไดเร็กทอรี)


4
สิ่งนี้เปลี่ยนไปยังไดเร็กทอรีก่อนหน้า บางทีคุณอาจจะมองว่าคำถามผิด
TheTechRobo36414519

1
ฉันคิดว่า OP กำลังมองหาบางสิ่งที่จะทำงานในสคริปต์ python และคำสั่งนั้นจะไปที่ dir หลักของ cwd ซึ่งอาจไม่ใช่ dir บ้านของผู้ใช้
Benjamin Goodacre

ฉันเข้าใจว่านี่ตอบคำถามผิด แต่นั่นเป็นคะแนนโหวตจำนวนมากสำหรับโปสเตอร์ใหม่ไม่น้อยเลย ...
rodrigo-silveira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.