[Tutor] Location of found item in list.
Luke Paireepinart
rabidpoobear at gmail.com
Fri Oct 20 00:17:33 CEST 2006
Chris Hengge wrote:
> This is the solution I came up with.
>
> for dirItem in directoryList:
> directoryListLower.append(dirItem.lower())
>
> #---Loop for file name comparison.
> for item in lineList: # For every item in the 'lineList'
> if item in directoryList: # If the item is also in 'directoryList'
> # Print out so I know it is found.
> print match.ljust(20) + item.ljust(20) \
> + directoryList[directoryList.index (item)]
> else: # If it isn't found, print what didn't match.
> # Use the lowercase form from each list to find what
> didn't match.
> if item.lower() in directoryListLower:
> # Print out so I can see why it failed.
> print fail.ljust(20) + item.ljust(20) + \
> directoryList[directoryListLower.index(item.lower())]
> os.rename(pathName + \
> directoryList[directoryListLower.index
> (item.lower())], \
> pathName + item)
It looks like it would do what you wanted.
The lines are a little long, but sometimes that can't be helped.
If you could come up with shorter variable names that were still
descriptive,
maybe that would help.
also, you can use a list comprehension for the first two lines:
directoryListLower = [item.lower() for item in directoryList]
IF you're not familiar with list comprehensions this may look a tad scary,
but once you learn them, you'll be pleased to see something in this form :)
also, I assume you initialized directoryListLower at some other point in
the code,
since append() doesn't work unless the variable is tied to a list object,
so in this syntax you could skip that line as well.
I'm not really sure why you don't want to use an inner loop, so you
don't have to use the index,
but I guess 'to each his own'.
I'd probably do it this way:
for line in lineList:
found = False
for filename in directoryList:
if line.lower() == filename.lower():
found = True
if line == filename: #an exact match
print "%s is already set to %s" % (line,filename)
#add a break here if you want :)
else:#we found the right directory entry, but we need to
change the case.
print "Changing %s to %s." % (filename,line)
os.rename(filename,line)
#add a break here if you want :)
if not found:
print "The item %s wasn't found in the directory listing." % line
Then you don't need the intermediate list of lowered items,
and you don't have those really long indexing lines.
But your way is fine :)
Good luck on your future Python endeavours.
-Luke
More information about the Tutor
mailing list