file system iteration

Discussion in 'Python' started by rick, Oct 9, 2006.

  1. rick

    rick Guest

    In Unix, the file system hierarchy is like a tree that has a base or
    'root' that exposes objects (files and folders) that can easily be
    iterated over.


    \ \ | / /
    \ \ | / /
    \ \|/ /
    \ | /
    \|/
    |
    |
    Root

    So, when I do os.chdir('/') I am at the base of the tree and can now use
    something like os.walk() to work with all of the file system objects.

    In Windows, the file system is disjointed and there is now real 'root'
    At least none that I can see. It looks more like this:

    | | | | | | |
    |_|_|_|_|_|_|
    A B C D E F G

    How do you guys handle this when working with scripts that need to touch
    all files and folders on a Windows machine? I've been looping through
    A-Z like this:

    import os.path

    paths = []

    if os.path.isdir('A:/'):
    paths.append('A:/')

    if os.path.isdir('B:/'):
    paths.append('B:/')

    ....

    That's a kludge, but it works OK. I'm sure WMI may have a function that
    returns mounted volumes, but under the circumstances currently, I can
    only use the standard Python library. Any ideas on how to do this better?

    Thanks
     
    rick, Oct 9, 2006
    #1
    1. Advertising

  2. rick

    rick Guest

    Gerrit Holl wrote:
    > The very least you can try:
    >
    > import string
    > string.ascii_uppercase
    >
    > for c in string.ascii_uppercase:
    > if os.path.isdir('%s:/' % c):
    > ...
    >
    > etc.
    > But I suppose there should be a better way.


    Oh yes, I do that. I spelled out the example very explicitly for
    clarity. I don't actually type in A-Z :)
     
    rick, Oct 9, 2006
    #2
    1. Advertising

  3. rick

    Gerrit Holl Guest

    On 2006-10-09 14:45:35 +0200, rick wrote:
    > import os.path
    >
    > paths = []
    >
    > if os.path.isdir('A:/'):
    > paths.append('A:/')
    >
    > if os.path.isdir('B:/'):
    > paths.append('B:/')
    >
    > ...
    >
    > That's a kludge, but it works OK. I'm sure WMI may have a function that
    > returns mounted volumes, but under the circumstances currently, I can
    > only use the standard Python library. Any ideas on how to do this better?


    The very least you can try:

    import string
    string.ascii_uppercase

    for c in string.ascii_uppercase:
    if os.path.isdir('%s:/' % c):
    ...

    etc.
    But I suppose there should be a better way.

    Gerrit.
     
    Gerrit Holl, Oct 9, 2006
    #3
  4. rick

    Georg Brandl Guest

    rick wrote:
    > In Unix, the file system hierarchy is like a tree that has a base or
    > 'root' that exposes objects (files and folders) that can easily be
    > iterated over.
    >
    >
    > \ \ | / /
    > \ \ | / /
    > \ \|/ /
    > \ | /
    > \|/
    > |
    > |
    > Root
    >
    > So, when I do os.chdir('/') I am at the base of the tree and can now use
    > something like os.walk() to work with all of the file system objects.
    >
    > In Windows, the file system is disjointed and there is now real 'root'
    > At least none that I can see. It looks more like this:
    >
    > | | | | | | |
    > |_|_|_|_|_|_|
    > A B C D E F G
    >
    > How do you guys handle this when working with scripts that need to touch
    > all files and folders on a Windows machine? I've been looping through
    > A-Z like this:


    Which application needs to walk over ALL files? Normally, you just have a
    starting path and walk over everything under it.

    In Unix, things aren't so clear either. For example, there are symbolic links
    that make the tree more complicated. Or different file system mounted on
    different mount points, perhaps not even representing real files like the
    /proc filesystem. All that needs caution when iterating over "all files".

    Georg
     
    Georg Brandl, Oct 9, 2006
    #4
  5. rick

    rick Guest

    Georg Brandl wrote:

    > Which application needs to walk over ALL files? Normally, you just have a
    > starting path and walk over everything under it.


    Searching for a file by name. Scanning for viruses. Etc. There are lots
    of legitimate reason to walk all paths from a central starting point, no???
     
    rick, Oct 9, 2006
    #5
  6. "rick" <> wrote:

    >> Which application needs to walk over ALL files? Normally, you just have a
    >> starting path and walk over everything under it.

    >
    > Searching for a file by name. Scanning for viruses. Etc. There are lots
    > of legitimate reason to walk all paths from a central starting point, no???


    what's the difference between a "starting path" and a "starting point" ?

    </F>
     
    Fredrik Lundh, Oct 9, 2006
    #6
  7. rick

    rick Guest

    Fredrik Lundh wrote:
    > what's the difference between a "starting path" and a "starting point" ?


    None. What starting path or point would you suggest under Windows? Is
    there something obvious that I'm missing? I see no starting point under
    windows as my initial question clearly stated.
     
    rick, Oct 9, 2006
    #7
  8. Georg Brandl wrote:
    >> Which application needs to walk over ALL files?


    How about 'updatedb' for starters, the index-maintainer for the common
    *nix command-line utility 'locate'.

    I'm pretty sure that os.walk( ) deals with symbolic links (by not
    visiting them) and ' /proc' type complexities by not doing anything to
    walked directories that '/proc' type entries cannot deal with. I think
    (no sarcasm intended) the point of offering a directory-like interface
    to '/proc' was so one can perform directory-like operations on it.

    --

    Jonathan Hartley

    +44 7737 062 225
     
    Jonathan Hartley, Oct 9, 2006
    #8
  9. rick

    Georg Brandl Guest

    rick wrote:
    > Georg Brandl wrote:
    >
    >> Which application needs to walk over ALL files? Normally, you just have a
    >> starting path and walk over everything under it.

    >
    > Searching for a file by name. Scanning for viruses. Etc. There are lots
    > of legitimate reason to walk all paths from a central starting point, no???


    Yes. Still, the user may not want to scan all files, or exclude non-locally
    mounted filesystem etc.

    So you'll always have to give the user control over where to start, and
    therefore there's no problem in letting him choose which drives he wants
    to search on.

    Georg
     
    Georg Brandl, Oct 9, 2006
    #9
  10. rick

    Georg Brandl Guest

    Jonathan Hartley wrote:
    > Georg Brandl wrote:
    > >> Which application needs to walk over ALL files?

    >
    > How about 'updatedb' for starters, the index-maintainer for the common
    > *nix command-line utility 'locate'.
    >
    > I'm pretty sure that os.walk( ) deals with symbolic links (by not
    > visiting them) and ' /proc' type complexities by not doing anything to
    > walked directories that '/proc' type entries cannot deal with. I think
    > (no sarcasm intended) the point of offering a directory-like interface
    > to '/proc' was so one can perform directory-like operations on it.


    Sure, and I don't say that this is not useful.

    But for all applications mentioned in the thread (virus scanning, searching
    for a file by name, updating the locate db), including /proc is not very
    useful, to say the least.

    Georg
     
    Georg Brandl, Oct 9, 2006
    #10
  11. rick

    Duncan Booth Guest

    rick <> wrote:

    > Georg Brandl wrote:
    >
    >> Which application needs to walk over ALL files? Normally, you just
    >> have a starting path and walk over everything under it.

    >
    > Searching for a file by name. Scanning for viruses. Etc. There are
    > lots of legitimate reason to walk all paths from a central starting
    > point, no???


    Personally I'd get pretty annoyed if my virus scanner started gratuitously
    scanning network drives and CD's.
     
    Duncan Booth, Oct 9, 2006
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Danny Anderson

    open new file each loop iteration

    Danny Anderson, Jan 21, 2004, in forum: C++
    Replies:
    0
    Views:
    444
    Danny Anderson
    Jan 21, 2004
  2. Dennis Schulz

    iteration through a file of structs

    Dennis Schulz, May 8, 2004, in forum: C Programming
    Replies:
    2
    Views:
    349
    -berlin.de
    May 8, 2004
  3. Tim Golden

    RE: file system iteration

    Tim Golden, Oct 9, 2006, in forum: Python
    Replies:
    3
    Views:
    407
  4. Rudi
    Replies:
    5
    Views:
    5,122
  5. Kyle Barbour
    Replies:
    10
    Views:
    597
    Marvin Gülker
    Aug 2, 2010
Loading...

Share This Page