source

전체 경로가 없는 Python Glob - 파일 이름만 있음

factcode 2023. 8. 7. 23:09
반응형

전체 경로가 없는 Python Glob - 파일 이름만 있음

디렉터리에서 글로벌을 사용하여 특정 확장자를 가진 파일을 가져올 수 있지만 전체 경로가 아닌 파일 이름 자체만 가져올 수 있는 방법이 있습니까?

파일 이름을 가져오는 데 사용합니다.

이것은 누군가에게 도움이 될 수 있습니다.

names = [os.path.basename(x) for x in glob.glob('/your_path')]

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

모든 파일 이름과 확장명을 가진 반복 가능한 파일을 반환합니다.

os.path.basname은 저에게 적합합니다.

다음은 코드 예제입니다.

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)

출력:

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

저는 상대적인 글로빙(예: zip 파일에 항목을 추가해야 할 때)을 위해 솔루션을 계속 다시 작성합니다. 이것이 일반적인 방식입니다.

# 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

CSV 파일을 찾는 경우:

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

EXCEL 파일을 찾고 있는 경우:

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

기존 답변 중 제가 검색하던 새 모듈 사용에 대해 언급한 내용이 없으므로 여기에 새 답변을 추가하겠습니다.

Path.glob 생산물Path디렉터리를 포함한 전체 경로를 포함하는 개체입니다.파일 이름만 필요한 경우 속성을 사용합니다.


만약 당신이 자주 전환하는 것을 발견한다면.pathlib그리고, 두 라이브러리 사이의 기능을 변환하는 이 편리한 테이블을 확인하십시오.

for f in glob.glob(gt_path + "/*.png"):  # find all png files
      exc_name = f.split('/')[-1].split(',')[0]

그러면 그.exc_name는 것과 같은myphoto.png

또는 pathlib 사용:

from pathlib import Path

dir_URL = Path("your_directory_URL") # e.g. Path("/tmp")
filename_list = [file.name for file in dir_URL.glob("your_pattern")]

glob.glob("*.filetype")을 사용하여 전체 경로를 가진 모든 파일의 목록을 가져오고 os.path.basename(list_item)을 사용하여 추가 경로를 제거하고 파일 이름만 유지합니다.

다음은 예입니다.

import glob
a=glob.glob("*.pkl")

각 파일의 전체 경로가 .pkl로 끝나는 목록을 반환합니다.

이제 다음을 사용하여 경로 정보를 제거하고 목록 항목의 파일 이름만 추출할 수 있습니다.

import os
b=os.path.basename(a[0]) 
# This is an example to extract filename for only one list item

파일 이름만으로 전체 목록을 만들어야 하는 경우:

bb=[os.path.basename(list_item) for list_item in a]

언급URL : https://stackoverflow.com/questions/7336096/python-glob-without-the-whole-path-only-the-filename

반응형