Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looking for File Traversal Functions in Python that are Like Java's

In Java you can do File.listFiles() and receive all of the files in a directory. You can then easily recurse through directory trees.

Is there an analogous way to do this in Python?

like image 284
jjnguy Avatar asked Sep 26 '08 17:09

jjnguy


People also ask

What is walk function in Python?

Python method walk() generates the file names in a directory tree by walking the tree either top-down or bottom-up.


2 Answers

Yes, there is. The Python way is even better.

There are three possibilities:

1) Like File.listFiles():

Python has the function os.listdir(path). It works like the Java method.

2) pathname pattern expansion with glob:

The module glob contains functions to list files on the file system using Unix shell like pattern, e.g.

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

3) File Traversal with walk:

Really nice is the os.walk function of Python.

The walk method returns a generation function that recursively list all directories and files below a given starting path.

An Example:

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
You can even on the fly remove directories from "dirs" to avoid walking to that dir: if "joe" in dirs: dirs.remove("joe") to avoid walking into directories called "joe".

listdir and walk are documented here. glob is documented here.

like image 78
dmeister Avatar answered Sep 21 '22 20:09

dmeister


As a long-time Pythonista, I have to say the path/file manipulation functions in the std library are sub-par: they are not object-oriented and they reflect an obsolete, lets-wrap-OS-system-functions-without-thinking philosophy. I'd heartily recommend the 'path' module as a wrapper (around os, os.path, glob and tempfile if you must know): much nicer and OOPy: http://pypi.python.org/pypi/path.py/2.2

This is walk() with the path module:

dir = path(os.environ['HOME'])
for f in dir.walk():
    if f.isfile() and f.endswith('~'):
        f.remove()
like image 21
Max Maximus Avatar answered Sep 22 '22 20:09

Max Maximus