Diberikan jalur seperti "mydir/myfile.txt"
, bagaimana cara menemukan jalur absolut file relatif terhadap direktori kerja saat ini di Python? Misalnya pada Windows, saya mungkin berakhir dengan:
"C:/example/cwd/mydir/myfile.txt"
Diberikan jalur seperti "mydir/myfile.txt"
, bagaimana cara menemukan jalur absolut file relatif terhadap direktori kerja saat ini di Python? Misalnya pada Windows, saya mungkin berakhir dengan:
"C:/example/cwd/mydir/myfile.txt"
Jawaban:
Juga berfungsi jika sudah menjadi jalur absolut:
sumber
normpath()
sebagai berikut:normpath(join(os.getcwd(), path))
. Jadi jikamydir/myfile.txt
tidak di bawahos.getcwd()
, jalur absolut bukanlah jalan nyata .mydir/myfile.txt
secara implisit merujuk ke jalur di dalam direktori kerja saat ini seperti yang setara dengan./mydir/myfile.txt
. Itu mungkin bukan jalan yang ingin Anda masukkan, tetapi sepertinya interpretasi yang benar dari jalan sejauh yang saya tahu. Bisakah Anda menguraikan?abspath
fungsi dan file nyata. Anda bisa memberikan pathname- file yang tidak ada dan heirarki direktori baik-baik saja dan abspath hanya akan menyelesaikan bit path (termasuk..
elemen direktori induk " ") dan mengembalikan sebuah string. Ini hanya string yang dihitung dari direktori saat ini; korelasi apa pun dengan file aktual sepertinya tidak disengaja. Cobaos.path.abspath("/wow/junk/../blha/hooey")
. Berhasil.os.path.exists
. Sebaliknya, sistem seperti PowerShell yang bersikeras pada jalur yang ada dengan fungsi resolusi jalur standar adalah rasa sakit untuk digunakan.relpath
path
relpath
Anda bisa menggunakan pustaka Python 3.4 baru
pathlib
. (Anda juga bisa mendapatkannya menggunakan Python 2.6 atau 2.7pip install pathlib
.) Para penulis menulis : "Tujuan perpustakaan ini adalah untuk menyediakan hierarki kelas sederhana untuk menangani jalur sistem file dan operasi umum yang dilakukan pengguna atas mereka."Untuk mendapatkan jalur absolut di Windows:
Atau di UNIX:
Documents ada di sini: https://docs.python.org/3/library/pathlib.html
sumber
os.path.abspath()
memberi saya kesalahan:,AttributeError: 'NoneType' object has no attribute 'startswith'
menggunakanPath().resolve()
tidak dengan filepath relatif sama. (Linux dan Python3.4)Lebih baik lagi, instal modul (ditemukan pada
PyPI
), itu membungkus semuaos.path
fungsi dan fungsi terkait lainnya menjadi metode pada objek yang dapat digunakan di mana pun string digunakan:sumber
pathlib
. Lihat jawaban saya di utas ini.from path import Path
kemudianPath('mydir/myfile.txt').abspath()
path
modul yang berbeda . Modul tertaut menggunakan kelas bernamapath
.Hari ini Anda juga dapat menggunakan
unipath
paket yang didasarkan padapath.py
: http://sluggo.scrapping.cc/python/unipath/Saya akan merekomendasikan menggunakan paket ini karena menawarkan antarmuka yang bersih untuk utilitas os.path umum .
sumber
Pembaruan untuk Python 3.4+
pathlib
yang benar-benar menjawab pertanyaan:Jika Anda hanya memerlukan string sementara, ingatlah bahwa Anda dapat menggunakan
Path
objek dengan semua fungsi yang relevanos.path
, termasuk tentu sajaabspath
:sumber
Catatan yang
expanduser
diperlukan (pada Unix) dalam kasus ekspresi yang diberikan untuk nama (atau direktori) nama dan lokasi dapat berisi yang terkemuka~/
(tilde merujuk ke direktori home pengguna), danexpandvars
menangani variabel lingkungan lainnya (seperti$HOME
).sumber
Ini selalu mendapatkan nama file yang tepat dari skrip saat ini, bahkan ketika itu dipanggil dari dalam skrip lain. Ini sangat berguna saat menggunakan
subprocess
.dari sana, Anda bisa mendapatkan path lengkap skrip dengan:
Ini juga membuat lebih mudah untuk menavigasi folder hanya dengan menambahkan
/..
sebanyak yang Anda inginkan 'naik' dalam hierarki direktori.Untuk mendapatkan cwd:
Untuk jalur induk:
Dengan menggabungkan
"/.."
dengan nama file lain, Anda dapat mengakses file apa saja di sistem.sumber
Modul
os
menyediakan cara untuk menemukan jalan abs.TETAPI sebagian besar jalur di Linux dimulai dengan
~
(tilde), yang tidak memberikan hasil yang memuaskan.jadi kamu bisa menggunakannya
srblib
untuk itu.instal menggunakan
python3 -m pip install srblib
https://pypi.org/project/srblib/
sumber
Saya lebih suka menggunakan glob
di sini adalah cara membuat daftar semua jenis file di folder Anda saat ini:
berikut adalah cara membuat daftar semua (misalnya) file .txt di folder Anda saat ini:
di sini adalah cara membuat daftar semua jenis file dalam direktori yang dipilih:
Semoga ini bisa membantu Anda
sumber
os.path.abspath()
) untuk jalur relatif apa pun yangglob
disediakan untuk dua kasus pertama Anda ...jika Anda menggunakan mac
ini akan memberi Anda jalan penuh:
akan menunjukkan jalur berikut:
sumber
Jika seseorang menggunakan python dan linux dan mencari path lengkap ke file:
sumber