Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > ls files --> list packer

Reply
Thread Tools

ls files --> list packer

 
 
kpp9c
Guest
Posts: n/a
 
      02-24-2006
I would like to use the power of Python to build some list structures
for me.

Namely i have organized a bunch of folders that have soundfiles in them
and would like Python to slurp up all the .aif/.aiff (or .wav whatever)
files in a given set of directories. My friend hacked up this is perl:

$files = `ls /snd/Public/*.aiff`;

@snd_filelist = split('\n',$files);

$i = 0;
while ($file = @snd_filelist[$i]) {
print "file $i = @snd_filelist[$i]\n";
$i++;
}


The only catch with the above code (besides its hideousness hee hee) is
if you have a directory w/i the structure, but in general it works and
with this i can just put gobs of files into separate dirs pack them
into a list and then send them to my script that scrambles them and
plays them.

I would like something similar, that works with python that is more
elegant and maybe even more robust.

but i am failing miserably and my perl friends mock me.

cheers,
kp8

 
Reply With Quote
 
 
 
 
kpp9c
Guest
Posts: n/a
 
      02-24-2006
and one example of a slightly fancier version would be a variation that
looks recursively into subdirectories and makes separate lists for each
subdirectory encountered.

so if i had a directory called "~/snd/"

and in "~/snd/" i had:

"~/snd/one/"
"~/snd/two/"
"~/snd/three/"

each with soundfiles in it.

I could get those packed in three separate lists named after the
directory or some such thing....

This would be so awesome because my carefully organizing your
directory, you would be carefully
organizing your data, change your dir structure or add/delete some
files and you would get a new structure in your script... prolly would
work with scripting your iTunes music folder too...

gosh ... sorry ... just thinking out-loud here and getting kind of
giddy! reaching for the python book ...

 
Reply With Quote
 
 
 
 
I V
Guest
Posts: n/a
 
      02-24-2006

kpp9c wrote:
> Namely i have organized a bunch of folders that have soundfiles in them
> and would like Python to slurp up all the .aif/.aiff (or .wav whatever)
> files in a given set of directories. My friend hacked up this is perl:
>
> $files = `ls /snd/Public/*.aiff`;


You could use posix.popen to duplicate the perl hack:

files = posix.popen('ls /snd/Public/*.aiff').read().strip()

> @snd_filelist = split('\n',$files);


snd_filelist = files.split('\n')

> I would like something similar, that works with python that is more
> elegant and maybe even more robust.


Lucklily, python lets you avoid this kind of horrible hack. Try
os.listdir:

snd_filelist = [f for f in os.listdir('/snd/Public/') if
f.endswith('.aiff')]

I think it's more elegant, and it's certainly more robust.

> but i am failing miserably and my perl friends mock me.


Now you get to mock your perl friends!

 
Reply With Quote
 
kpp9c
Guest
Posts: n/a
 
      02-24-2006
cool i just tried:

>>> import os
>>>snd_filelist = [f for f in os.listdir('/Users/foo/snd') if f.endswith('.aif')]



and it worked! and will take a huge bite out of my big script ... which
i make by doing an ls
in the terminal and editing (boo hoo)

one one lc and one import!

cool..

that other sillyness i mentioned is not strickly required ... just
dreaming but i know involves some kind of os walk type thing prolly ...
meanwhile this is so exciting!

Thank you!!!!

 
Reply With Quote
 
kpp9c
Guest
Posts: n/a
 
      02-24-2006
gosh i could even use other string methods like startswith to take all
the files in a given directory which i have organized with a prefix and
have them stuffed in different lists ... i think ...

snd_filelist = [f for f in os.listdir('/Users/foo/snd') if
f.endswith('.aif') & f.startswith('r')]

\m/ (>.<) \m/

yeah!

runnin' to the interpreta now...

 
Reply With Quote
 
Jeremy Sanders
Guest
Posts: n/a
 
      02-24-2006
I V wrote:

> snd_filelist = [f for f in os.listdir('/snd/Public/') if
> f.endswith('.aiff')]


Or even

from glob import glob

snd_filelist = glob('/snd/Public/*.aiff')

Jeremy

--
Jeremy Sanders
http://www.jeremysanders.net/
 
Reply With Quote
 
Singletoned
Guest
Posts: n/a
 
      02-24-2006
Try using The Path module:
http://www.jorendorff.com/articles/python/path/.

I wrote a little script to traverse a directory structure which you
could use. (You just pass a function to it and it runs it on each file
in the directory. You want it to run on each directory instead, so
I've changed it a little for you).

import path

def traverse(directory, function, depth=0, onfiles=True, ondirs=False):
thedir = path.path(directory)
if onfiles == True:
for item in thedir.files():
function(item, depth)
if ondirs == True:
for item in thedir.dirs():
function(item, depth)
for item in thedir.dirs():
traverse(item, function, depth+1, onfiles, ondirs)

You can use it like so:

def printaifs(thedir, depth):
print thedir.name
for item in thedir.files("*.aif'"):
print "\t" + item

traverse(r"/Users/foo/snd", printaifs, onfiles=False, ondirs=True)

NB: I've quickly adapted this whilst away from an installation of
Python, so it is untested, but should mostly work, unless there's a
typo.

Hope this helps at least a little...

Ed

PS The Python Tutor list tends to be a much better place to discuss
this kind of stuff. If you haven't yet encountered Kent and Alan's
help, then you have a joyous experience ahead of you.

 
Reply With Quote
 
Magnus Lycka
Guest
Posts: n/a
 
      02-24-2006
kpp9c wrote:
> that other sillyness i mentioned is not strickly required ... just
> dreaming but i know involves some kind of os walk type thing prolly ...


os.walk isn't exactly rocket science... Something similar to this?

>>> import os
>>> for dir, dirs, files in os.walk('.'):

.... txt_files = [x for x in files if x.endswith('.txt')]
.... if txt_files:
.... print dir, txt_files
 
Reply With Quote
 
kpp9c
Guest
Posts: n/a
 
      02-24-2006
that is nice.... but the little further wrinkle, which i have no idea
how to do, would be to have the contents of each directory packed into
a different list.... since you have no idea before hand how many lists
you will need (how many subdirs you will enounter) ... well that is
where the hairy part comes in...

-kp--

 
Reply With Quote
 
kpp9c
Guest
Posts: n/a
 
      02-27-2006
os.listdir works great ... just one problem, it packs the filenames
only into a list... i need the full path and seach as i might i se NO
documentation on python.org for os.listdir()

how do i either grab the full path or append it later ...

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Can't find par loader at C:/Perl/site/lib/PAR/Packer.pm line 101. osoeder@gmx.de Perl Misc 0 06-07-2007 02:58 PM
pp question (PAR::Packer) Yakov Perl Misc 2 04-10-2007 05:42 AM
PAR, PAR::Packer smueller@cpan.org Perl Misc 1 12-01-2006 09:41 PM
Info needed on buying Hewlett Packer R607 garryhatter@telus.net Digital Photography 1 12-02-2004 10:19 PM
exerb: packer? David Garamond Ruby 7 02-04-2004 04:38 AM



Advertisments