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

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

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

9 Solutions collect form web for “Поиск функций трассировки файлов в Python, похожих на Java”

Да, есть. Путь Python еще лучше.

Существует три возможности:

1) Как и File.listFiles ():

Python имеет функцию os.listdir (путь). Он работает как метод Java.

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

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

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

3) Перемещение файла с помощью прохода:

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

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

Пример:

 import os
 from os.path import join
 для root, dirs, файлов в os.walk ('/ usr'):
    print «Текущий каталог», root
    печать «Подкаталоги», dirs
    распечатать «Файлы», файлы

Вы можете даже на лету удалить каталоги из «dirs», чтобы не дойти до этого каталога: если «joe» в dirs: dirs.remove («joe»), чтобы не ходить в каталоги, называемые «joe».

listdir и walk описаны здесь . glob описан здесь .

Являясь долговременной Pythonista, я должен сказать, что функции обработки пути / файла в библиотеке std являются подпараметрами: они не являются объектно-ориентированными и отражают устаревшие, let-wrap-OS-system-functions-without- философия мышления. Я бы сердечно рекомендовал модуль «путь» в качестве обертки (вокруг 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() 

Попробуйте «listdir ()» в модуле os ( docs ):

 import os print os.listdir('.') 

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

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

Взгляните на 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)) 

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

  walk (верх, func, arg)

         Дерево каталогов с функцией обратного вызова.

         Для каждого каталога в дереве каталогов, укорененном сверху (включая верхние
         сам, но исключая '.'  и «..»), вызовите func (arg, dirname, fnames).
         dirname - это имя каталога, а fnames - список имен
         файлы и подкаталоги в dirname (исключая «.» и «..»).  FUNC
         может изменить список имен fnames на месте (например, через del или slice assign),
         и прогулка будет возвращаться только в подкаталоги, имена которых остаются в
         fnames;  это может быть использовано для реализации фильтра или для наложения определенного
         порядок посещения.  Семантика не определена или требуется для аргумента arg,
         вне этого arg всегда передается func.  Его можно использовать, например, для прохождения
         шаблон имени файла или изменяемый объект, предназначенный для накопления
         статистика.  Передача None для arg является обычным явлением.

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

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

Пример:

 >>> 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) 
  • Слияние двух или более xml-файлов и отображение в виде HTML с помощью XSLT
  • Начиная с Android: Java или Python (SL4A)
  • Декодирование json в jython с использованием только библиотек по умолчанию
  • Проверка IPv6-адресов и канонизация
  • Ограничить доступ App Engine к учетным записям G Suite в настраиваемом домене
  • Эквивалент Python "public static void main"
  • top gotchas для кого-то, перемещающегося из статического lang (java / c #) в динамический язык, такой как python
  • Почему переводчик Судоку медленнее оригинального?
  • Python - лучший язык программирования в мире.