On 14 Mai 2005, [EMAIL PROTECTED] wrote: > Here's the problem - I want a list (array) of the files in a directory, > and then I want to iterate over the list testing for image-ness (with > imghdr.what()) and put all the image filenames in a global list. > > What I've tried is this: > > files = glob.glob('*.*') > > for file in files: > global pics > pics = [] > if imghdr.what(file): > # so far so good - file is a list of files in the directory > pics.append(file) > # I this this is the problem - my list only has the last > # alphabetical entry in it
The problem here is that in every iteration you set the list pics to `[]'. If you wanted to solve the problem like above (not very nice; try to avoid globals if possible) you had to define `pics' outside the loop. Bernard gave you an answer how you could solve it with a simple list comprehension (just filter the output from os.listdir); it can also be written like that: filter(imghdr.what, os.listdir('.')) Just jump before to the directory you want to get searched with: os.chdir(path) If you want a more general solution which also allows to search recursively through a directory tree you could use something like that: def filter_files (root, filepred=lambda f: f, dirpred=lambda d: False): filtered= [] jn = os.path.join for path, dirs, files in os.walk(root, topdown=True): for d in dirs: if not dirpred(jn(path, d)): dirs.remove(d) filtered.extend([jn(path,f) for f in files if filepred(jn(path, f))]) return filtered The above takes two callback functions: filepred and dirpred. For every file filepred returns a true value that file gets appended to the list of returned files. `dirpred' allows you to recurse only in directories where that function returns a true value. So to have the same as above you write: filter_files('.', filepred=imghdr.what) and if you wanted to search a directory tree without e.g. the ./bin directory you could write: filter_files('.', filepred=imghdr.what, dirpred=lambda d: not d.endswith('bin')) HTH Karl -- Please do *not* send copies of replies to me. I read the list _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor