Ищите функции обхода файлов в Python, которые похожи на Java - PullRequest
10 голосов
/ 26 сентября 2008

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

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

Ответы [ 9 ]

25 голосов
/ 26 сентября 2008

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

Есть три варианта:

1) Нравится File.listFiles ():

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

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

5 голосов
/ 27 сентября 2008

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

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

import os
print os.listdir('.')
2 голосов
/ 26 сентября 2008

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

2 голосов
/ 26 сентября 2008

Используйте 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.
2 голосов
/ 26 сентября 2008

Взгляните на 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))
2 голосов
/ 26 сентября 2008

Прямо из Библиотеки ссылок Python

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
1 голос
/ 27 августа 2013

Вы также можете проверить 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
0 голосов
/ 29 февраля 2016

Поскольку я долгое время программировал на 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...