Python Glob không có toàn bộ đường dẫn - chỉ có tên tệp


82

Có cách nào để tôi có thể sử dụng tên miền trên một thư mục, để lấy các tệp có phần mở rộng cụ thể, nhưng chỉ có tên tệp, không phải toàn bộ đường dẫn?

python  glob 

Câu trả lời:




12

Sử dụng cầu kết hợp với os.path.basename.


2
map(os.path.basename, glob.glob("your/path"))

Trả về một tệp có thể lặp lại với tất cả tên tệp và phần mở rộng.


1

os.path.basename phù hợp với tôi.

Đây là ví dụ về Mã:

import sys,glob
import os

expectedDir = sys.argv[1]                                                    ## User input for directory where files to search

for fileName_relative in glob.glob(expectedDir+"**/*.txt",recursive=True):       ## first get full file name with directores using for loop

    print("Full file name with directories: ", fileName_relative)

    fileName_absolute = os.path.basename(fileName_relative)                 ## Now get the file name with os.path.basename

    print("Only file name: ", fileName_absolute)

Đầu ra:

Full file name with directories:  C:\Users\erinksh\PycharmProjects\EMM_Test2\venv\Lib\site-packages\wheel-0.33.6.dist-info\top_level.txt
Only file name:  top_level.txt

Bạn đã trộn lẫn các tên biến của mình: tuyệt đối có nghĩa là đường dẫn đầy đủ; tương đối chỉ có nghĩa là tên cơ sở.
omatai

0

Tôi tiếp tục viết lại giải pháp cho sự hiển thị tương đối (đặc biệt là khi tôi cần thêm các mục vào tệp zip) - đây là những gì nó thường trông như thế nào.

# Function
def rel_glob(pattern, rel):
    """glob.glob but with relative path
    """
    for v in glob.glob(os.path.join(rel, pattern)):
        yield v[len(rel):].lstrip("/")

# Use
# For example, when you have files like: 'dir1/dir2/*.py'
for p in rel_glob("dir2/*.py", "dir1"):
    # do work
    pass

0

Nếu bạn đang tìm kiếm tệp CSV:

file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.csv')]

Nếu bạn đang tìm kiếm tệp EXCEL:

file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.xlsx')]
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.