membangun path absolut dengan os.jalan.join()
I'd seperti untuk membangun path absolut di python, sementara pada saat yang sama tinggal cukup menyadari hal-hal seperti jalur pemisah.
edit0: untuk contoh ada pada direktori root dari saya filesystem /etc/init.d
(atau C:\etc\init.d
pada w32), dan saya ingin membangun ini hanya dari unsur-unsur dll
dan init.d
(pada w32, mungkin saya juga perlu disk-ID, seperti C:
)
Dalam rangka untuk tidak harus khawatir tentang jalan-pemisah, os.bergabung.path()
jelas alat pilihan. Tapi tampaknya bahwa ini hanya akan membuat relatif jalan:
print "MYPATH:", os.path.join('etc', 'init.d')
MYPATH: etc/init.d
Menambahkan dummy pertama-elemen (misalnya''
) doesn't membantu apa-apa:
print "MYPATH:", os.path.join('', 'etc', 'init.d')
MYPATH: etc/init.d
Membuat elemen pertama mutlak jelas membantu, tapi ini semacam dari kekalahan ide untuk menggunakan os.jalan.join()
print "MYPATH:", os.path.join('/etc', 'init.d')
MYPATH: /etc/init.d
edit1: menggunakan os.jalan.abspath()
hanya akan mencoba untuk mengubah path relatif ke path absolut.
misalnya, mempertimbangkan menjalankan berikut di direktori /home/foo
:
print "MYPATH:", os.path.abspath(os.path.join('etc', 'init.d'))
MYPATH: /home/foo/etc/init.d
Jadi, apa adalah standar cross-platform cara untuk "root" jalan?
root = ??? # <--
print "MYPATH:", os.path.join(root, 'etc', 'init.d')
MYPATH: /etc/init.d
edit2: pertanyaan yang benar-benar bermuara ke: sejak slash terkemuka di /etc/init.d
membuat jalan ini path absolut, apakah ada cara untuk membangun terkemuka ini slash pemrograman?
(Saya tidak ingin membuat asumsi-asumsi yang terkemuka slash menunjukkan path absolut)
Menggunakan
os.sep
sebagai akar bekerja untuk saya:Linux:
/python/bin
Windows:
\python\bin
Menambahkan
path.abspath()
untuk campuran akan memberikan huruf drive pada Windows juga dan masih kompatibel dengan Linux:Linux:
/python/bin
Windows:
C:\python\bin
Saya pikir anda dapat menggunakan
os.jalan.normpath
. Berikut ini's apa yang saya dapatkan pada Windows:I'm tidak yakin persis apa hal yang tepat untuk dilakukan dengan drive awalan, tapi saya pikir meninggalkannya berarti sesuatu seperti "tetap menggunakan drive I'm sekarang," yang mungkin adalah apa yang anda inginkan. Mungkin orang lebih familiar dengan Windows bisa menjelaskan?
jadi solusinya saya datang dengan adalah untuk membangun akar sistem berkas dengan mengikuti file yang diberikan untuk itu's root:
Agar anda dapat melakukan check untuk menjalankan os oleh sys.platfrom
pada windows
pada linux
kemudian
Harap dicatat bahwa 'linux2' mungkin tidak mencakup semua distro linux
anda bisa mencoba dengan
os.jalan.splitdrive
untuk mendapatkan nama drive/filesystem, maka bergabung dengan andafoo
string.http://docs.python.org/2/library/os.path.html#os.path.splitdrive
sesuatu seperti (belum teruji!)
harus melakukan trik.