Перемещение по каталогу, поиск файлов .xls и glob игнорирует их (Python и модуль glob)

#python-3.x #glob

#python-3.x #глоб

Вопрос:

Я написал цикл for, который обходит дерево каталогов и успешно возвращает имена всех файлов. Вложенные папки включают файлы .pdf, поэтому я пытаюсь извлечь данные только из файлов .xls. Использование glob(‘*.xls’) по какой-то причине не работает.

Это не расширения .xlsx, а .xls, так что проблема не в этом. Я запустил функции печати, чтобы протестировать обход каталога (это работает), но тогда я, похоже, не могу захватить файлы с расширением .xls.

 import os
from glob import glob

for folderName, subfolders, filenames in os.walk('C:\Users\userName\someFiles'):
    print('The current folder is '   folderName)

    for subfolder in subfolders:
        print('SUBFOLDER OF '   folderName   ': '   subfolder)
    for filename in filenames:
        dataPrint = glob('*.xls')
        print('File Name is: ' filename  ' Glob name is: ' str(dataPrint))
  

Это работает до такой степени:

 The current folder is C:Users\userName\someFilessubFolder
File Name is: Sample Data March 2019.pdf Glob name is: []
File Name is: File 1 March 2019.pdf Glob name is: []
File Name is: File 1 March 2019.xls Glob name is: []
  

Вы можете видеть, как glob отображается пустым. Я не могу понять это, потому что glob никогда не подводил меня раньше! Спасибо, что взглянули.

Ответ №1:

это может сработать для вас

 import os
from glob import glob
path = 'C:\Users\username\Desktop\glob\target'

for folderName, subfolders, filenames in os.walk(path):

    for subfolder in subfolders:
        print('SUBFOLDER OF '   folderName   ': '   subfolder)
    for filename in filenames:
        dataPrint = glob(path '\*.xlsx')
        print('File Name is: ' filename  ' Glob name is: ' str(dataPrint))
  

Комментарии:

1. Однако все еще отображается пустой, я не уверен, что понимаю вашу переменную path. Почему у вас в нем есть glob?

2. Привет, переменная path содержала glob , потому что я использовал это в имени папки, чтобы протестировать его. Вы можете называть это как угодно; но оно должно указывать на папку, содержащую файлы, которые вы хотите перечислить. Причина, по которой он может оказаться пустым для вас, заключается в том, что я изменил расширение на .xlsx вместо .xls

3. хорошо, это то, что я подумал, поэтому я проигнорировал это. Я также поймал .xlsx. Все еще появляется пустой. Это очень странно.

4. Может ли это быть связано с вашими вложенными папками? * .xls будет искать любое имя файла с расширением XLS, но я не думаю, что оно будет искать во вложенных папках path. Если у вас есть только один уровень папок ниже переменной path, вы могли бы просто использовать другую звездочку, подобную этой: dataPrint = glob(path '\*\*.xls')

5. Это фиксирует весь путь как имя глобуса. Это очень озадачивает.