path stuff

F

fscked

I am walking some directories looking for a certain filename pattern.
This part works fine, but what if I want to exclude results from a
certain directory being printed?

eg

d:\dir\mydir1\filename.txt <----------I want to
see this one
d:\dir\mydir2\archived\filename.txt <----------I don't want to
see anything in the "archived" directory
d:\dir\mydir2\filename.txt <----------Again, I do
want to see this one

I am having a bit of trouble figuring out how to use the path module
to hack up the path to determine if I am in a subdir I care about. So
either don show me the results from a certain directory or just plain
skip a certain directory.
 
K

kyosohma

I am walking some directories looking for a certain filename pattern.
This part works fine, but what if I want to exclude results from a
certain directory being printed?

eg

d:\dir\mydir1\filename.txt <----------I want to
see this one
d:\dir\mydir2\archived\filename.txt <----------I don't want to
see anything in the "archived" directory
d:\dir\mydir2\filename.txt <----------Again, I do
want to see this one

I am having a bit of trouble figuring out how to use the path module
to hack up the path to determine if I am in a subdir I care about. So
either don show me the results from a certain directory or just plain
skip a certain directory.

Hi,

One way to do it would be to grab just the directory path like this:

dirPath = os.path.dirname(path)

and then use and if:

if 'archived' in dirPath:
# skip this directory

That should get you closer to the answer anyway.

Mike
 
G

Gabriel Genellina

I am walking some directories looking for a certain filename pattern.
This part works fine, but what if I want to exclude results from a
certain directory being printed?

Using os.walk you can skip undesired directories entirely:

for dirpath, dirnames, filenames in os.walk(starting_dir):
if "archived" in dirnames:
dirnames.remove("archived")
# process filenames, typically:
for filename in filenames:
fullfn = os.path.join(dirpath, filename)
...
 
F

fscked

Using os.walk you can skip undesired directories entirely:

for dirpath, dirnames, filenames in os.walk(starting_dir):
if "archived" in dirnames:
dirnames.remove("archived")
# process filenames, typically:
for filename in filenames:
fullfn = os.path.join(dirpath, filename)
...

OK, this is on Winbloze and it keeps giving me "The directory name is
invalid: u"blahblahblah" with double backslashies everywhere. I am
currently trying to figure out how to make those go away. I shall
check back in a bit.

thanks for all the help so far. :)
 
F

fscked

OK, this is on Winbloze and it keeps giving me "The directory name is
invalid: u"blahblahblah" with double backslashies everywhere. I am
currently trying to figure out how to make those go away. I shall
check back in a bit.

thanks for all the help so far. :)- Hide quoted text -

- Show quoted text -

ok, got the backslashies fixed, not I want it to print just a single
line for each matching filename and dirpath, but it prints 3... hmm...
 
F

fscked

ok, got the backslashies fixed, not I want it to print just a single
line for each matching filename and dirpath, but it prints 3... hmm...- Hide quoted text -

- Show quoted text -

Nevermind, I am indentationally challenged. I was printing under the
for dirpath, dirname, filename part and had to unindent uno time.

It works as desired now, thanks!
 
F

fscked

Nevermind, I am indentationally challenged. I was printing under the
for dirpath, dirname, filename part and had to unindent uno time.

It works as desired now, thanks!- Hide quoted text -

- Show quoted text -

ok, I lied, it is still doing the archived folders. Here is the code:

import os, sys
from path import path

myfile = open("boxids.txt", "r", 0)
for line in myfile:
d = 'D:\\Dir\\' + path(line.strip())
for f in d.walkfiles('*Config*.xml'):
for dirpath, dirnames, filenames in os.walk(d):
if "Archived" in dirnames:
dirnames.remove("Archived") #skip this directory
print f
print 'Done'


when it does the print f it still shows me the dirs i don't want to
see.

any more ideas?

TIA
 
G

Gabriel Genellina

ok, I lied, it is still doing the archived folders. Here is the code:

import os, sys
from path import path

myfile = open("boxids.txt", "r", 0)
for line in myfile:
d = 'D:\\Dir\\' + path(line.strip())
for f in d.walkfiles('*Config*.xml'):
for dirpath, dirnames, filenames in os.walk(d):
if "Archived" in dirnames:
dirnames.remove("Archived") #skip this directory
print f
print 'Done'


when it does the print f it still shows me the dirs i don't want to
see.

You are walking the directory structure *twice*, using two different
methods at the same time. Also, there is no standard `path` module, and
several implementations around, so it would be a good idea to tell us
which one you use.
If you want to omit a directory, and include just filenames matching a
pattern:

import os, sys, os.path, fnmatch

def findinterestingfiles(root_dir):
for dirpath, dirnames, filenames in os.walk(root_dir):
if "Archived" in dirnames:
dirnames.remove("Archived")
for filename in fnmatch.filter(filenames, '*Config*.xml'):
fullfn = os.path.join(dirpath, filename)
print fullfn

myfile = open("boxids.txt", "r")
for line in myfile:
dirname = os.path.join('D:\\Dir\\', line.strip())
findinterestingfiles(dirname):
myfile.close()
 
F

fscked

En Thu, 10 May 2007 19:04:30 -0300, fscked <[email protected]>
escribió:









You are walking the directory structure *twice*, using two different
methods at the same time. Also, there is no standard `path` module, and
several implementations around, so it would be a good idea to tell us
which one you use.
If you want to omit a directory, and include just filenames matching a
pattern:

import os, sys, os.path, fnmatch

def findinterestingfiles(root_dir):
for dirpath, dirnames, filenames in os.walk(root_dir):
if "Archived" in dirnames:
dirnames.remove("Archived")
for filename in fnmatch.filter(filenames, '*Config*.xml'):
fullfn = os.path.join(dirpath, filename)
print fullfn

myfile = open("boxids.txt", "r")
for line in myfile:
dirname = os.path.join('D:\\Dir\\', line.strip())
findinterestingfiles(dirname):
myfile.close()

Should this code work? I get a syntax error and cannot figure out why.
 
G

Gabriel Genellina

Should this code work? I get a syntax error and cannot figure out why.

Sorry, remove the spurious : after findinterestingfiles(dirname) and it
should work fine.
 
B

BartlebyScrivener

I am walking some directories looking for a certain filename pattern.
This part works fine, but what if I want to exclude results from a
certain directory being printed?

You might find this thread helpful

http://tinyurl.com/2guk3l

Note how the backup dirs are excluded.

Highly recommend Python Cookbook, too.

rd
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,679
Members
48,796
Latest member
Greg L.

Latest Threads

Top