รับเส้นทางจากไฟล์ที่เปิดใน Python


113

หากฉันมีไฟล์ที่เปิดอยู่จะมีการosเรียกเพื่อรับเส้นทางที่สมบูรณ์เป็นสตริงหรือไม่

f = open('/Users/Desktop/febROSTER2012.xls')

จากfวิธีการที่ฉันจะได้รับ"/Users/Desktop/febROSTER2012.xls"?

คำตอบ:


145

คีย์ในที่นี้คือnameแอตทริบิวต์ของfวัตถุที่เป็นตัวแทนของไฟล์ที่เปิด คุณจะได้รับเช่นนั้น:

>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'

มันช่วย?


4
สำหรับไฟล์ที่สร้างโดย: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')ไม่ทำงาน!
วิกเตอร์

19
@Victor: โปรดอ่านเอกสารของtempfileโมดูลโดยเฉพาะสำหรับtempfile.NamedTemporaryFileด้านล่างเอกสารที่tempfile.TemporaryFileคุณกล่าวถึง นี่เป็นกรณีเฉพาะสำหรับไฟล์ชั่วคราวและตามที่เห็นในเอกสารมีโซลูชันอยู่แล้ว tempfile.TemporaryFileไม่ได้มีไว้เพื่อใช้ในกรณีที่คุณต้องการอ่านชื่อ
Tadeck

12
ถ้าคุณสร้างไฟล์โดยใช้เปิด ( 'foo.txt', 'w') แล้วทำ f.name ก็เพียงให้คุณมี foo.txt ผลผลิต
searchengine27

Zans ให้โซลูชันที่ใช้ได้กับพา ธ สัมพัทธ์ด้วย ดูคำตอบของเขาด้านล่าง
Markus

1
โปรดทราบว่าหากคุณใช้เส้นทางสัมพัทธ์เช่นf = open('some/relative/path')แล้วเปลี่ยนไดเร็กทอรีการทำงานเช่นos.chdir('somewhere/esle')นั้นf.nameจะไม่อัปเดตตามนั้นและจะไม่สมเหตุสมผลในไดเร็กทอรีการทำงานปัจจุบันของคุณ
user986730

96

ฉันมีปัญหาเดียวกันแน่นอน หากคุณใช้พา ธ สัมพัทธ์ os.path.dirname (พา ธ ) จะส่งกลับเฉพาะพา ธ สัมพัทธ์ os.path.realpathทำเคล็ดลับ:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)

15
นี่คือคำตอบที่แท้จริง
BlueTrin

2
วิธีนี้ใช้ได้เฉพาะเมื่อพา ธ ไฟล์สัมพัทธ์ยังคงเป็นพา ธ ไฟล์ที่ถูกต้อง ถ้าฉันระบุชื่อไฟล์เป็น 'text.txt' จากไดเร็กทอรี '~ / Documents /' แล้วเปลี่ยนไดเร็กทอรีเป็น '~ /' os.path.realpathจะส่งคืน '~ / text.txt' แทน '~ / Documents / text.txt'
K. Nielson

1
ฉันสังเกตเห็นปัญหาเกี่ยวกับ realpath ไม่ได้แก้ไขกรณีของอักขระอัลฟาของไฟล์ แต่จะเก็บกรณีที่ใช้ในคำสั่งเปิด ฉันหวังว่ามันจะคืนชื่อไฟล์ตามที่มีอยู่จริงในระบบไฟล์ (นี่คือ Windows แน่นอน)
RufusVS

12

และถ้าคุณแค่ต้องการรับชื่อไดเร็กทอรีและไม่จำเป็นต้องมีชื่อไฟล์ที่มาพร้อมกับมันคุณสามารถทำได้ด้วยวิธีการทั่วไปดังต่อไปนี้โดยใช้osโมดูล Python

>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'

ด้วยวิธีนี้คุณสามารถยึดโครงสร้างไดเร็กทอรีได้


f = open('febROSTER2012.xls')นี้จะส่งกลับสตริงที่ว่างเปล่าถ้าคุณใช้ คุณจะไปสู่เส้นทางที่สมบูรณ์ได้อย่างไร?
NZD

3

คุณจะได้รับแบบนี้เช่นกัน

filepath = os.path.abspath(f.name)

3
ซึ่งจะผนวกเข้ากับไดเร็กทอรีการทำงานปัจจุบันไม่ใช่ไดเร็กทอรีที่อยู่จริง
Bachsau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.