Partial directory search question

C

chad

I have a directory that contains the following

login
rc
sum
_1
_2
_3
_4

What's the sanest way to print out all the files in the directory that
start with the underscore? Ie, I just want to list _1, _2, _3, _4.
 
T

Tim Chase

What's the sanest way to print out all the files in the directory that
start with the underscore? Ie, I just want to list _1, _2, _3, _4.

I'd use a string's join() method to combine the results of a
list-comprehension or generator that filtered the output of
os.listdir() based on the startswith() method of the strings.

Left intentionally oblique and code-free because this sounds a
bit like a home-work problem. If you're a python coder, that
should make pretty decent sense and be a one-liner to implement.

-tkc
 
C

chad

I'd use a string's join() method to combine the results of a
list-comprehension or generator that filtered the output of
os.listdir() based on the startswith() method of the strings.

Left intentionally oblique and code-free because this sounds a
bit like a home-work problem.  If you're a python coder, that
should make pretty decent sense and be a one-liner to implement.

-tkc

Okay, sorry for the delay to the response. I got side tracked trying
to stalk, I mean talk to the 59 year old neighbor girl. Anyways, I
couldn't get it to one in one line. Here is what I did...

% more rec.py
#!/usr/local/bin/python

import os
import time

for filename in os.listdir("/usr/bbs/confs/september"):
#stat = os.stat(filename)
if filename.startswith("_"):
print filename

../rec.py
_1
_2
_3
_4
_5
_6
_7
_8

It correctly prints out all the files in the directory that start with
an underscore.
 
C

chad

Okay, sorry for the delay to the response. I got side tracked trying
to stalk, I mean talk to the 59 year old neighbor girl. Anyways, I
couldn't get it to one in one line. Here is what I did...

% more rec.py
#!/usr/local/bin/python

import os
import time

for filename in os.listdir("/usr/bbs/confs/september"):
     #stat = os.stat(filename)
     if filename.startswith("_"):
        print filename

./rec.py
_1
_2
_3
_4
_5
_6
_7
_8

It correctly prints out all the files in the directory that start with
an underscore.


er *couldn't get it into a one liner*.
 
M

Martien Verbruggen

I have a directory that contains the following

login
rc
sum
_1
_2
_3
_4

What's the sanest way to print out all the files in the directory that
start with the underscore? Ie, I just want to list _1, _2, _3, _4.

I don't know what you mean by "sanest", but this is one way:

import glob
for f in glob.glob("_*"):
print f

Martien
 
L

lallous

chad said:
Okay, sorry for the delay to the response. I got side tracked trying
to stalk, I mean talk to the 59 year old neighbor girl. Anyways, I
couldn't get it to one in one line. Here is what I did...

% more rec.py
#!/usr/local/bin/python

import os
import time

for filename in os.listdir("/usr/bbs/confs/september"):
#stat = os.stat(filename)
if filename.startswith("_"):
print filename

L = [filename for filename in os.listdir("/usr/bbs/confs/september") if
filename.startswith("_")]

Now you have a list with the desired filtered names.
 
T

Tim Chase

import os
for filename in os.listdir("/usr/bbs/confs/september"):
#stat = os.stat(filename)
if filename.startswith("_"):
print filename

yes, as lallous mentioned, this can be done as a
list-comprehension/generator. If printing is all you want to do,
it's a nice and concise way:

print '\n'.join(fname for fname in os.listdir(loc) if
fname.startswith('_'))

If you're doing more processing than just printing it, your
for-loop is a better (clearer) way to go. If you have lots of
processing code, it might help to do the inverse:

for filename in os.listdir(location):
if not filename.startswith('_'): continue
lots()
of_processing()
and_your_complex_logic()
goes()
here()

It removes one level of indentation depth and makes it clear that
you don't intend to do anything with the non-leading-underscore
versions (rather than looking for a corresponding "else:" line
possibly screens later).

-tkc
 
A

alex23

Tim Chase said:
If you're doing more processing than just printing it, your
for-loop is a better (clearer) way to go.  If you have lots of
processing code, it might help to do the inverse:

   for filename in os.listdir(location):
     if not filename.startswith('_'): continue
     lots()
     of_processing()
     and_your_complex_logic()
     goes()
     here()

Personally, I'd still go with a generator to drive the for-loop:

underscored_files = (f for f in os.listdir(<location>) if not
f.startswith('_'))
for filename in underscored_files:
etc...

What I'm traversing in the for-loop is far more obvious (to me) from
the name of the generator than from having to parse the first few
lines of the loop. It's a lot easier to genericise that behaviour too.
 

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,196
Messages
2,571,036
Members
47,631
Latest member
kukuh

Latest Threads

Top