dapat saya lakukan
>>> os.path.join("c:/","home","foo","bar","some.txt")
'c:/home\\foo\\bar\\some.txt'
Tapi, saat aku melakukannya
>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(s)
['c:/', 'home', 'foo', 'bar', 'some.txt']
Apa yang kulewatkan di sini?
python
python-2.7
os.path
ATOzTOA
sumber
sumber
/Users/...
. Untuk mengatasinya, saya menambahkan garis miring itu secara manual, jika seseorang menghadapi masalah yang sama ...Dengan asumsi
join
tidak dirancang seperti itu (seperti yang ditunjukkan ATOzTOA), dan hanya membutuhkan dua parameter, Anda masih bisa menggunakan built-inreduce
:>>> reduce(os.path.join,["c:/","home","foo","bar","some.txt"]) 'c:/home\\foo\\bar\\some.txt'
Output yang sama seperti:
>>> os.path.join(*["c:/","home","foo","bar","some.txt"]) 'c:/home\\foo\\bar\\some.txt'
Hanya untuk alasan kelengkapan dan pendidikan (dan untuk situasi lain di mana
*
tidak berhasil).Petunjuk untuk Python 3
reduce
dipindahkan kefunctools
modul.sumber
reduce
dipindahkan kefunctools
modul jika ada orang lain yang mencarinya seperti saya.reduce
ke modul adalah pernyataan.from functools import reduce
Saya tersandung situasi di mana daftarnya mungkin kosong. Dalam hal itu:
os.path.join('', *the_list_with_path_components)
Perhatikan argumen pertama, yang tidak akan mengubah hasilnya.
sumber
Itu hanya metodenya. Anda tidak melewatkan apa pun. The dokumentasi resmi menunjukkan bahwa Anda dapat menggunakan daftar membongkar untuk memasok beberapa jalur:
s = "c:/,home,foo,bar,some.txt".split(",") os.path.join(*s)
Perhatikan
*s
intead dari justs
inos.path.join(*s)
. Menggunakan tanda bintang akan memicu pembongkaran daftar, yang berarti bahwa setiap argumen daftar akan diberikan ke fungsi sebagai argumen terpisah.sumber
Ini juga dapat dianggap sebagai operasi pengurangan peta sederhana jika Anda ingin menganggapnya dari perspektif pemrograman fungsional.
import os folders = [("home",".vim"),("home","zathura")] [reduce(lambda x,y: os.path.join(x,y), each, "") for each in folders]
reduce
dibangun dengan Python 2.x. Dalam Python 3.x itu telah dipindahkan keitertools
Namun jawaban yang diterima lebih baik.Ini telah dijawab di bawah ini tetapi menjawab jika Anda memiliki daftar item yang perlu digabungkan.
sumber