ディレクトリでglobを使用して、特定の拡張子を持つファイルを取得する方法はありますか?ただし、パス全体ではなく、ファイル名自体のみを取得しますか?
ディレクトリでglobを使用して、特定の拡張子を持つファイルを取得する方法はありますか?ただし、パス全体ではなく、ファイル名自体のみを取得しますか?
回答:
これは誰かを助けるかもしれません:
names = [os.path.basename(x) for x in glob.glob('/your_path')]
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
私は相対的なグロビングのソリューションを書き直し続けています(特に、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')]