パス全体を含まないPythonGlob-ファイル名のみ


83

ディレクトリでglobを使用して、特定の拡張子を持つファイルを取得する方法はありますか?ただし、パス全体ではなく、ファイル名自体のみを取得しますか?

python  glob 

回答:




12

globをos.path.basename。と組み合わせて使用​​します。


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

すべてのファイル名と拡張子を含むiterableを返します。


1

os.path.basenameは私のために働きます。

コード例は次のとおりです。

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

変数名を混同しました。絶対パスはフルパスを意味します。相対とは、ベース名のみを意味します。
omatai

0

私は相対的なグロビングのソリューションを書き直し続けています(特に、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

0

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')]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.