質問: glob.glob('./data/*.xlsx') ``` と書きました。しかし、これだと一時ファイルも取得してしまいます。 どのように書けば一時ファイル以外のエクセルを全部取得できますか?
回答: `glob.glob()`で得られた結果を、リスト内包表記で加工するやり方です。 `data`ディレクトリの中は下記のようになっているという前提です。`dir.xlsx`はディレクトリです。 ``` data ├── a.xlsx ├── b.xlsx ├── dir.xlsx └── ~$a.xlsx ``` ``` # coding: UTF-8 import os import glob files = glob.glob('./data/*.xlsx') # dir.xlsxはディレクトリ print(files) # ['./data/b.xlsx', './data/~$a.xlsx', './data/dir.xlsx', './data/a.xlsx'] files2 = [os.path.basename(f) for f in files] # ファイル名のみを取得 print(files2) # ['b.xlsx', '~$a.xlsx', 'dir.xlsx', 'a.xlsx'] files3 = [f for f in files2 if f[:2] != '~$'] # 一時ファイルを削除 print(files3) # ['b.xlsx', 'dir.xlsx', 'a.xlsx'] files4 = [f for f in files3 if os.path.isdir(f) == False] # ディレクトリ(dir.xlsx)を削除 print(files4) # ['b.xlsx', 'a.xlsx'] ``` 追記 `glob()`はディレクトリも取得してしまうとのご指摘を受けましたので、修正しました。 追記2 `glob(./data/*.xlsx)`は`data`ディレクトリを含むファイル名を返すとのご指摘を頂き、全体的に修正しました。