de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 umläute
umläute
Question

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)

42 2013-07-02T15:02:25+00:00 5
Caitlin  Quintero Weaver
Caitlin Quintero Weaver
Pertanyaan edit 23 Februari 2018 в 12:23
Pemrograman
path
python
absolute-path
 girardc79
girardc79
22 Januari 2015 в 2:41
2015-01-22T02:41:14+00:00
Lebih
Sumber
Sunting
#19810742

Menggunakan os.sep sebagai akar bekerja untuk saya:

path.join(os.sep, 'python', 'bin')

Linux: /python/bin

Windows: \python\bin

Menambahkan path.abspath() untuk campuran akan memberikan huruf drive pada Windows juga dan masih kompatibel dengan Linux:

path.abspath(path.join(os.sep, 'python', 'bin'))

Linux: /python/bin

Windows: C:\python\bin

59
0
Jack O&#39;Connor
Jack O'Connor
5 Desember 2014 в 11:37
2014-12-05T23:37:02+00:00
Lebih
Sumber
Sunting
#19810741

Saya pikir anda dapat menggunakan os.jalan.normpath. Berikut ini's apa yang saya dapatkan pada Windows:

>>> os.path.normpath("/etc/init.d")
'\\etc\\init.d'

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?

4
0
Solution / Answer
 uml&#228;ute
umläute
2 Juli 2013 в 4:07
2013-07-02T16:07:34+00:00
Lebih
Sumber
Sunting
#19810740

jadi solusinya saya datang dengan adalah untuk membangun akar sistem berkas dengan mengikuti file yang diberikan untuk itu's root:

def getRoot(file=None):
  if file is None:
      file='.'
  me=os.path.abspath(file)
  drive,path=os.path.splitdrive(me)
  while 1:
    path,folder=os.path.split(path)
    if not folder:
       break
  return drive+path

 os.path.join(getRoot(), 'etc', 'init.d')
2
0
Ansuman Bebarta
Ansuman Bebarta
2 Juli 2013 в 3:19
2013-07-02T15:19:45+00:00
Lebih
Sumber
Sunting
#19810738

Agar anda dapat melakukan check untuk menjalankan os oleh sys.platfrom

pada windows

>>> sys.platform
'win32'

pada linux

>>> sys.platform
'linux2'

kemudian

if sys.platform == 'win32':
    ROOT = os.path.splitdrive(os.path.abspath('.'))[0]
elif sys.platform == 'linux2':
    ROOT = os.sep

Harap dicatat bahwa 'linux2' mungkin tidak mencakup semua distro linux

Ansuman Bebarta
Ansuman Bebarta
Jawaban edit 2 Juli 2013 в 4:27
1
0
 Christoph
Christoph
2 Juli 2013 в 3:56
2013-07-02T15:56:57+00:00
Lebih
Sumber
Sunting
#19810739

anda bisa mencoba dengan os.jalan.splitdrive untuk mendapatkan nama drive/filesystem, maka bergabung dengan anda foo string.

http://docs.python.org/2/library/os.path.html#os.path.splitdrive

sesuatu seperti (belum teruji!)

(drive, tail) = os.path.splitdrive(os.getcwd())
os.path.join(drive, 'foo')

harus melakukan trik.

-1
0
Related communities 6
Python Indonesia
Python Indonesia
24 648 pengguna
Programmer Python Indonesia. Group ini dikelola oleh sejumlah admin. Baca pesan tersemat / pinned message: https://t.me/pythonID/217588
Buka telegram
Indonesian Python Warriors
Indonesian Python Warriors
1 441 pengguna
Di grup ini tidak ada kewajiban untuk menggunakan username dan foto. Yang tidak boleh adalah spamming. Gak boleh baper, kalau nanya yang bener, eror jangan difoto pake HP, gunakan screenshot, code copas ke pastebin.com lalu share link ke sini.
Buka telegram
Python-ID Jogja
Python-ID Jogja
956 pengguna
Buka telegram
BASIC PYTHON INDONESIA
BASIC PYTHON INDONESIA
248 pengguna
Buka telegram
Python Newbie Indonesia
Python Newbie Indonesia
195 pengguna
Peraturan grup Python Newbie 🌻Dilarang spam 🌻Dilarang menggunakan bahasa kasar 🌻Dilarang beriklan di grup tanpa seizin admin Beberapa video dasar python dapat diliat melalui channel youtube juan aditya Jangan lupa untuk subscribe ya🙏
Buka telegram
PythonWealth Indonesia 🇮🇩
PythonWealth Indonesia 🇮🇩
27 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Elena Nudel
Terdaftar 9 jam yang lalu
2
firdaus faizal
Terdaftar 10 jam yang lalu
3
Виталий Теслюк
Terdaftar 2 hari yang lalu
4
shokir qochqorov
Terdaftar 2 hari yang lalu
5
Roxana Elizabeth CASTILLO Avalos
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi