Interpretasikan jalur dengan * di Windows dengan Python

Saya mencoba menemukan jalur sebenarnya yang lengkap di Windows, berdasarkan jalur dengan karakter * di dalamnya (yang sepertinya mirip dengan ekspresi reguler).

Misalnya, jika di konsol Windows saya melakukan:

cd C:\\Windows\\Program Files\\MySWv1*\\bin

jalur di atas diperluas seperti:

C:\\Windows\\Program Files\\MySWv1.90\\bin

dan kemudian perintah cd berhasil dijalankan.

Namun, jika dengan Python (2.7) saya mencoba menjalankan yang berikut:

import os
my_path = 'C:\\Windows\\Program Files\\MySWv1*\\bin'
os.path.exists(my_path)

Ini mengembalikan False.

Bagaimana saya bisa membuat skrip di atas mengembalikan True?


person Vito Gentile    schedule 01.08.2015    source sumber
comment
Wildcard diperluas oleh shell dan karenanya Anda tidak dapat menggunakannya dengan os.path.exists()   -  person Camron_Godbout    schedule 02.08.2015
comment
terkait stackoverflow.com/a/4296148/3896984   -  person Camron_Godbout    schedule 02.08.2015


Jawaban (1)


Saya menemukan solusinya di sini. Ini didasarkan pada modul glob:

import os
import glob
my_path = glob.glob('C:\\Windows\\Program Files\\MySWv1*\\bin')[0]
os.path.exists(my_path)

Sebenarnya, glob.glob menafsirkan jalur dan mengganti karakter pengganti apa pun (seperti *) dengan satu atau lebih string, menghasilkan daftar jalur yang cocok dengan string tersebut.

Artinya, dalam kode produksi, Anda harus selalu memperhitungkan kemungkinan bahwa lebih dari satu jalur dihasilkan oleh glob.glob, dan, jika diperlukan, lakukan sesuatu untuk mengelola aturan ini.

person Vito Gentile    schedule 01.08.2015
comment
Hasil dari glob adalah sebuah daftar, dan jika daftar tersebut tidak kosong, item tersebut pasti ada pada saat itu. Dalam OS multithread tidak ada jaminan bahwa mereka masih ada. Yang terbaik adalah mencoba operasi dan menangani pengecualian. - person Eryk Sun; 02.08.2015