Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

1) Подобно File.listFiles():

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

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

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


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

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

Действительно приятна функция 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", чтобы не дойти до этого каталога: если "joe" в dirs: dirs.remove( "joe" ), чтобы не ходить в каталоги, называемые "joe" .

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

Ответ 2

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

Ответ 3

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

import os
print os.listdir('.')

Ответ 4

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

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

Ответ 5

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

Ответ 6

Используйте 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.

Ответ 7

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

Ответ 8

Вы также можете проверить 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

Ответ 9

Увидев, что я программировал в 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)