ตีความเส้นทางด้วย * ใน Windows ด้วย Python

ฉันกำลังพยายามค้นหาเส้นทางจริงแบบเต็มบน Windows ตามเส้นทางที่มีอักขระ * อยู่ในนั้น (ซึ่งดูเหมือนว่าจะเป็นสิ่งที่คล้ายกับนิพจน์ทั่วไป)

ตัวอย่างเช่น หากในคอนโซล Windows ฉันทำ:

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

เส้นทางข้างต้นถูกขยายในลักษณะดังนี้:

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

จากนั้นคำสั่ง cd ก็ดำเนินการได้สำเร็จ

อย่างไรก็ตาม หากใน Python (2.7) ฉันพยายามดำเนินการต่อไปนี้:

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

สิ่งนี้จะคืนค่า False

ฉันจะทำให้สคริปต์ข้างต้นส่งคืน True ได้อย่างไร


person Vito Gentile    schedule 01.08.2015    source แหล่งที่มา
comment
ไวด์การ์ดถูกขยายด้วยเชลล์ ดังนั้นคุณจึงไม่สามารถใช้กับ os.path.exists()   -  person Camron_Godbout    schedule 02.08.2015
comment
stackoverflow.com/a/4296148/3896984 ที่เกี่ยวข้อง   -  person Camron_Godbout    schedule 02.08.2015


คำตอบ (1)


ฉันพบวิธีแก้ปัญหาแล้วที่นี่ มันขึ้นอยู่กับโมดูล glob:

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

ที่จริงแล้ว glob.glob ตีความเส้นทางและแทนที่ไวด์การ์ดใดๆ (เช่น *) ด้วยสตริง หรือมากกว่า หนึ่งสตริง ทำให้เกิด รายการ ของเส้นทางที่ตรงกัน

ซึ่งหมายความว่า ในโค้ดที่ใช้งานจริง คุณควรคำนึงถึงความเป็นไปได้ที่ glob.glob จะสร้างเส้นทางมากกว่าหนึ่งเส้นทาง และหากจำเป็น ให้ดำเนินการบางอย่างเพื่อจัดการกฎนี้

person Vito Gentile    schedule 01.08.2015
comment
ผลลัพธ์ของ glob คือรายการ และหากรายการไม่ว่างเปล่า รายการนั้นก็จะมีอยู่ในขณะนั้นอย่างแน่นอน ในระบบปฏิบัติการแบบมัลติเธรดนั้นไม่มีการรับประกันว่าจะยังคงมีอยู่ วิธีที่ดีที่สุดคือลองดำเนินการและจัดการกับข้อยกเว้น - person Eryk Sun; 02.08.2015