Nhận đường dẫn từ tệp đang mở bằng Python


113

Nếu tôi có một tệp đã mở, có oslệnh gọi nào để lấy đường dẫn hoàn chỉnh dưới dạng chuỗi không?

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

Từ f, tôi sẽ nhận được "/Users/Desktop/febROSTER2012.xls"như thế nào?

Câu trả lời:


145

Chìa khóa ở đây là namethuộc tính của fđối tượng đại diện cho tệp đã mở. Bạn hiểu như thế:

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

Nó có ích gì không?


4
Đối với các tệp được tạo bởi: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')không hoạt động!
Victor

19
@Victor: Vui lòng đọc tài liệu của tempfilemô-đun, đặc biệt là đối với tempfile.NamedTemporaryFile, ngay bên dưới tài liệu tempfile.TemporaryFilemà bạn đã đề cập. Đây là trường hợp cụ thể cho tệp tạm thời và như đã thấy trong tài liệu, đã có giải pháp hiện có. tempfile.TemporaryFilekhông được sử dụng trong trường hợp bạn muốn đọc tên.
Tadeck

12
Nếu bạn tạo một file sử dụng mở ( 'foo.txt', 'w') và sau đó làm f.name, nó chỉ cung cấp cho bạn với sản lượng foo.txt
searchengine27

Zans cũng đưa ra một giải pháp hoạt động cho các đường dẫn tương đối. Hãy xem câu trả lời của anh ấy bên dưới.
Markus

Có tempfile.NamedTemporaryFile trong trường hợp bạn cần tên.
Dữ liệu Apollo

96

Tôi đã có vấn đề chính xác cùng. Nếu bạn đang sử dụng một đường dẫn tương đối thì os.path.dirname (đường dẫn) sẽ chỉ trả về đường dẫn tương đối. os.path.realpath thực hiện thủ thuật:

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

15
Đây thực sự là câu trả lời thực sự.
BlueTrin

1
Điều này chỉ hoạt động nếu đường dẫn tệp tương đối vẫn là đường dẫn tệp chính xác. Nếu tôi chỉ định tên tệp là 'text.txt' từ thư mục '~ / Documents /' và sau đó thay đổi các thư mục thành '~ /', os.path.realpathsẽ trả về '~ / text.txt' thay vì '~ / Documents / text.txt'.
K. Nielson,

1
Tôi nhận thấy sự cố với đường dẫn thực. Nó không sửa trường hợp của các ký tự alpha của tệp mà giữ nguyên trường hợp được sử dụng trong câu lệnh mở. Tôi đã hy vọng nó sẽ trả về tên tệp vì nó thực sự tồn tại trên hệ thống tệp. (Đây là Windows, tất nhiên)
RufusVS

12

Và nếu bạn chỉ muốn lấy tên thư mục và không cần tên tệp đi kèm với nó, thì bạn có thể làm điều đó theo cách thông thường sau đây bằng cách sử dụng osmô-đun Python.

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

Bằng cách này, bạn có thể nắm được cấu trúc thư mục.


Điều này trả về một chuỗi trống nếu bạn sử dụng f = open('febROSTER2012.xls'). Làm thế nào bạn có thể đi đến con đường đầy đủ?
NZD

3

Bạn cũng có thể nhận được nó như thế này.

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

2
Điều này sẽ nối nó vào thư mục làm việc hiện tại, không phải thư mục nơi nó thực sự cư trú.
Bachsau
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.