LLLit: Изучение и практика программирования

os.walk пропускает определенные подкаталоги

for dirname, dirnames, filenames in os.walk("C:\\",followlinks=True,topdown=True):

    for subdirname in dirnames:    
        os.chdir(os.path.join(subdirname, dirname))

        if os.getcwd()!="C:\Windows\winsxs":
            print(os.getcwd())

Как видите, этот код должен искать все подкаталоги на всем диске C, менять рабочий каталог Python и отображать результат. По какой-то причине я не могу не заметить, что в os.walk отсутствует довольно много подкаталогов. Кажется, он находит большое дерево каталогов, а затем сканирует только около половины его, прежде чем двигаться дальше (или, по крайней мере, это относится к каталогам, которые я проверял, например, к рабочему столу)

Я обыскал сеть, но не могу найти никого, у кого была бы эта проблема, некоторая помощь была бы очень признательна (я начинающий кодер).

РЕДАКТИРОВАТЬ: решение сработало, но теперь я получаю ошибку разрешения при запуске кода.


  • Разве dirname не должно стоять перед subdirname в вызове join? 01.05.2015

Ответы:


1

В качестве документации (здесь: https://docs.python.org/2/library/os.html#os.walk), чтобы получить полный путь к файлу или каталогу в пути каталога, выполните команду os.path.join(путь каталога, имя).

Ваше присоединение должно быть:

os.chdir(os.path.join(dirname, subdirname))

ДЛЯ ВАШЕГО РЕДАКТИРОВАНИЯ: Если вы хотите выполнить поиск во всех каталогах, вы можете найти некоторые из них, на вход или чтение которых у вас нет прав как у обычного пользователя. Если вы хотите это сделать, вам, вероятно, придется использовать учетную запись администратора.

01.05.2015
  • Это странно, потому что я администратор. 01.05.2015
  • Я не использую Windows, но нашел это: даже если ваш пользователь является членом группы администраторов, программа может не использовать права администратора. Когда вы выбираете «Запуск от имени администратора» и ваш пользователь является администратором, программа запускается с исходным токеном неограниченного доступа. Может быть, это помогает. 01.05.2015

  • 2

    Ваше соединение неверно. Это должно быть:

    os.chdir(os.path.join(dirname, subdirname))
    

    Вот почему вы никогда не входите в самые высокие уровни каталогов.

    01.05.2015
    Новые материалы

    Поэзия онлайн-кодирования: путешествие пикселей и страсти
    В мире, наполненном инновациями, онлайн-обучение программированию становится холстом, на котором обретает форму полотно вашей мечты. Это больше, чем просто создание строк кода; это сродни..

    Обработка изображений с помощью Python - размытие и повышение резкости для начинающих
    Как применить ядра свертки к цветным изображениям? В этой статье мы обсудим, как применять ядра размытия и повышения резкости к изображениям. Эти базовые ядра составляют основу многих более..

    Ограничение скорости в .NET Core 7 Web API
    Что такое ограничение скорости? Ограничение скорости — это процесс, используемый для ограничения количества запросов, разрешенных для определенного ресурса в указанном временном окне. .NET..

    Стабильная Diffusion 1.0 выдаёт более красивые картинки, чем SD 2.1?! Почему?
    Удивительные открытия, которые я сделал недавно. Смотрите в видео: https://youtu.be/PakgD6FewoU Есть одно логичное объяснение — что у вас?

    Веб-скрапинг с помощью одной строки кода Pandas
    Честно говоря, вы пытались скопировать таблицу с веб-сайта, чтобы вставить ее в электронную таблицу Excel, и почти всегда эта, казалось бы, простая процедура приводила к беспорядку. Одна из..

    Ориентированная на проект дорожная карта разработки интерфейса с тщательно подобранным плейлистом на YouTube (2022 г.)
    Начните свой путь разработчика по-гиковски Оглавление 👉 Уровень 1 ‹/› HTML Темы, на которых следует сосредоточиться: 🌈 CSS Темы, на которых следует сосредоточиться: ⚙️ JavaScript..

    Реализация простой искусственной нейронной сети с нуля на Python
    Раскрытие математики и логики, стоящих за этим. Что такое нейронная сеть? С точки зрения непрофессионала, нейронная сеть - это просто математическая функция, в которую вы вводите вектор..