[Tutor] ok, I want to read a dir.
Michael P. Reilly
arcege@speakeasy.net
Thu, 27 Dec 2001 09:38:33 -0500
On Wed, Dec 26, 2001 at 10:58:33PM -0500, Kirk Bailey wrote:
> Say, looking this over, FILTER looks like a good candidate for this job.
>
>
> files=os.listdir('./lists/') # this creates a raw dir listing
> filelist=[] # create an empty list
> fnmatch.filter(filelist, "*.info") # return the subset of list
> which match!
>
> this is not right, but close. What is the right way to use fnmatch and
> filter?
filelist = fnmatch.filter(os.listdir('./lists'), "*.info")
or going back to the glob module:
filelist = glob.glob1('./lists', "*.info")
> This is the error I get:
>
> ns# ./TLpost.py
> Traceback (innermost last):
> File "./TLpost.py", line 189, in ?
> listname = sys.argv[1]
> IndexError: list index out of range
> ns#
>
> And that puzzles hell out of me.
This is a different error. The sys.argv is a list with the words from
the command line.
$ cat showargs.py
import sys
print sys.argv
$ python showargs.py
['showargs.py']
$ python showargs.py hi there
['showargs.py', 'hi', 'there']
$ python showargs.py "hi there"
['showargs.py', 'hi there']
Your command has only the program name and no other arguments.
So sys.argv[1] would be out of bounds in the list (there is only one
element). You might want to put a try-except around the statement.
try:
listname = sys.argv[1]
except IndexError:
raise SystemExit("list name argument required")
And if you ever want to add command-line options, you might want to look
into the getopt module.
-Arcege