หากฉันมีไฟล์ที่เปิดอยู่จะมีการosเรียกเพื่อรับเส้นทางที่สมบูรณ์เป็นสตริงหรือไม่
f = open('/Users/Desktop/febROSTER2012.xls')
จากfวิธีการที่ฉันจะได้รับ"/Users/Desktop/febROSTER2012.xls"?
หากฉันมีไฟล์ที่เปิดอยู่จะมีการosเรียกเพื่อรับเส้นทางที่สมบูรณ์เป็นสตริงหรือไม่
f = open('/Users/Desktop/febROSTER2012.xls')
จากfวิธีการที่ฉันจะได้รับ"/Users/Desktop/febROSTER2012.xls"?
คำตอบ:
คีย์ในที่นี้คือnameแอตทริบิวต์ของfวัตถุที่เป็นตัวแทนของไฟล์ที่เปิด คุณจะได้รับเช่นนั้น:
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'
มันช่วย?
tempfileโมดูลโดยเฉพาะสำหรับtempfile.NamedTemporaryFileด้านล่างเอกสารที่tempfile.TemporaryFileคุณกล่าวถึง นี่เป็นกรณีเฉพาะสำหรับไฟล์ชั่วคราวและตามที่เห็นในเอกสารมีโซลูชันอยู่แล้ว tempfile.TemporaryFileไม่ได้มีไว้เพื่อใช้ในกรณีที่คุณต้องการอ่านชื่อ
f = open('some/relative/path')แล้วเปลี่ยนไดเร็กทอรีการทำงานเช่นos.chdir('somewhere/esle')นั้นf.nameจะไม่อัปเดตตามนั้นและจะไม่สมเหตุสมผลในไดเร็กทอรีการทำงานปัจจุบันของคุณ
ฉันมีปัญหาเดียวกันแน่นอน หากคุณใช้พา ธ สัมพัทธ์ os.path.dirname (พา ธ ) จะส่งกลับเฉพาะพา ธ สัมพัทธ์ os.path.realpathทำเคล็ดลับ:
>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)
os.path.realpathจะส่งคืน '~ / text.txt' แทน '~ / Documents / text.txt'
และถ้าคุณแค่ต้องการรับชื่อไดเร็กทอรีและไม่จำเป็นต้องมีชื่อไฟล์ที่มาพร้อมกับมันคุณสามารถทำได้ด้วยวิธีการทั่วไปดังต่อไปนี้โดยใช้osโมดูล Python
>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'
ด้วยวิธีนี้คุณสามารถยึดโครงสร้างไดเร็กทอรีได้
f = open('febROSTER2012.xls')นี้จะส่งกลับสตริงที่ว่างเปล่าถ้าคุณใช้ คุณจะไปสู่เส้นทางที่สมบูรณ์ได้อย่างไร?
คุณจะได้รับแบบนี้เช่นกัน
filepath = os.path.abspath(f.name)
tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')ไม่ทำงาน!