entries
- это список имен (каталогов?). os.listdir
не может принимать их в качестве параметра одновременно. Вам нужен внешний цикл, а внутренний цикл должен объединить запись с каталогом, из которого она была отсканирована.
root_dir = "/Users/katherineperkins/Downloads/MillionSongSubset/data"
for entry in os.listdir(root_dir):
for filename in os.listdir(os.path.join(root_dir,entry)):
if filename.endswith((".h5",".py")):
# do something: beware as filename isn't the full filepath.
# it needs joining with os.path.join(root_dir,entry)
Приведенный выше код работает, если entry
не является , а не каталогом. Мы могли бы проверить каталог, или перехватить исключение, или, возможно, в какой-то момент переключиться на glob
с двухуровневым подстановочным знаком «все файлы», что намного проще
import glob
for filepath in glob.glob("/Users/katherineperkins/Downloads/MillionSongSubset/data/*/*"):
if filepath.endswith((".h5",".py")):
# do something
тестирование расширения файлас endswith
(который принимает tuple
между прочим) дешевле, чем с использованием glob.glob
на обоих расширениях (например: glob.glob("/Users/katherineperkins/Downloads/MillionSongSubset/data/*/*.h5")
(потребуется 2 сканирования каталога)