Поиск функций обхода файлов в Python, похожих на Java

В Java вы можете выполнить File.listFiles() и получить все файлы в каталоге. Затем вы можете легко просматривать деревья каталогов.

Есть ли аналогичный способ сделать это в Python?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
10
0
8 785
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Прямо из справочной библиотеки Python

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

Попробуйте "listdir ()" в модуле ОС (документы):

import os
print os.listdir('.')

Взгляните на os.walk() и примеры здесь. С os.walk() вы можете легко обработать все дерево каталогов.

Пример по ссылке выше ...

# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))
Ответ принят как подходящий

Да, есть. Способ Python даже лучше.

Есть три возможности:

1) Как File.listFiles ():

В Python есть функция os.listdir (path). Он работает как метод Java.

2) расширение шаблона имени пути с помощью glob:

Модуль glob содержит функции для вывода списка файлов в файловой системе с использованием шаблона оболочки Unix, например

files = glob.glob('/usr/joe/*.gif')

3) Обход файла с обходом:

Действительно хороша функция os.walk в Python.

Метод walk возвращает функцию генерации, которая рекурсивно перечисляет все каталоги и файлы ниже заданного начального пути.

Пример:

import os
from os.path import join
for root, dirs, files in os.walk('/usr'):
   print "Current directory", root
   print "Sub directories", dirs
   print "Files", files
Вы даже можете "на лету" удалять каталоги из "dirs", чтобы избежать перехода к этому каталогу: if "joe" в dirs: dirs.remove ("joe"), чтобы не заходить в каталоги, называемые "joe".

listdir и walk задокументированы как здесь. glob задокументирован здесь.

Используйте os.path.walk, если вам также нужны подкаталоги.

walk(top, func, arg)

        Directory tree walk with callback function.

        For each directory in the directory tree rooted at top (including top
        itself, but excluding '.' and '..'), call func(arg, dirname, fnames).
        dirname is the name of the directory, and fnames a list of the names of
        the files and subdirectories in dirname (excluding '.' and '..').  func
        may modify the fnames list in-place (e.g. via del or slice assignment),
        and walk will only recurse into the subdirectories whose names remain in
        fnames; this can be used to implement a filter, or to impose a specific
        order of visiting.  No semantics are defined for, or required of, arg,
        beyond that arg is always passed to func.  It can be used, e.g., to pass
        a filename pattern, or a mutable object designed to accumulate
        statistics.  Passing None for arg is common.

Я бы порекомендовал против os.path.walk, поскольку он удаляется в Python 3.0. os.walk в любом случае проще, или хотя бы я посчитал его проще.

Как давний Pythonista, я должен сказать, что функции манипулирования путями / файлами в библиотеке std являются второстепенными: они не объектно-ориентированы и отражают устаревшие функции Let's-wrap-OS-system-without- философия мышления. Я искренне рекомендую модуль 'path' в качестве оболочки (вокруг os, os.path, glob и tempfile, если вы должны знать): намного лучше и OOPy: http://pypi.python.org/pypi/path.py/2.2

Это walk () с модулем пути:

dir = path(os.environ['HOME'])
for f in dir.walk():
    if f.isfile() and f.endswith('~'):
        f.remove()

Вы также можете попробовать Unipath, объектно-ориентированную оболочку модулей Python os, os.path и shutil.

Пример:

>>> from unipath import Path
>>> p = Path('/Users/kermit')
>>> p.listdir()
Path(u'/Users/kermit/Applications'),
Path(u'/Users/kermit/Desktop'),
Path(u'/Users/kermit/Documents'),
Path(u'/Users/kermit/Downloads'),
...

Установка через Сырный магазин:

$ pip install unipath

Видя, как я программировал на Python в течение долгого времени, я много раз использовал модуль os и создал свою собственную функцию для печати всех файлов в каталоге.

Код функции:

import os

def PrintFiles(direc):
    files = os.listdir(direc)
    for x in range(len(files)):
        print("File no. "+str(x+1)+": "+files[x])

PrintFiles(direc)

Другие вопросы по теме