question

MRAB google at mrabarnett.plus.com
Sat Aug 25 16:10:30 EDT 2007


On Aug 24, 7:20 pm, JYOUN... at kc.rr.com wrote:
> Still trying to learn Python and was hoping some of you might be able to give me some advice
> on my code
> below.  It works but I'm wondering if there's more efficient ways of doing this than the way
> I've done it.
>
> The first step is I have to loop thru nested folders and find all files that start with "LOGO".  So
> I use Unix's 'find'
> and write all the paths out to a text file like so:
>
> find ~/Desktop/logoFiles/ -type f -iname "LOGO*" > ~/Desktop/logo_stuff/paths.txt"
>
> Next, I use Python (code below) to look thru each paragraph of that file (paths.txt).  While
> looping thru each
> paragraph, I want to first make sure that the folder name that the file is in is a number.  For
> example, if it found
> file 'LOGO9012', then I'd want to make sure the folder name that this file was in was a
> number (~/Desktop/
> logoFiles/12/LOGO9012).  If that's ok then I grab the number off the file name.  If there's not
> a number in the
> file name then I ignore it.  I then create a dictionary that has a key which equals the number I
> grabbed from the
> file name and then the value contains the full file path (that I grabbed out of the text file)
> followed by a
> delimiter (<::>) followed by 'LOGO' and the number I got from the file name (making sure to
> keep any leading
> zeroes if they were there originally).  Finally, I sort the keys in numerical order and save out a
> file with all the
> appropriate info from my dictionary (which will be a list of paths followed by a delimiter and
> file name).  Here's
> an example of what this new file might contain:
>
> /Users/jyoung1/Desktop/logoFiles/02/Logo002<::>LOGO002
> /Users/jyoung1/Desktop/logoFiles/02/LOGO102<::>LOGO102
> /Users/jyoung1/Desktop/logoFiles/02/LOGO302<::>LOGO302
> /Users/jyoung1/Desktop/logoFiles/9/LOGO462.2PMS<::>LOGO462
>
> Anyway, if anyone has time to look at this I'd appreciate your thoughts.  Thanks!
>
> Jay
>
> #!/usr/bin/python
>
> import re
>
> dList = {}
> sortedList = ""
>
> pathFile = open("~/Desktop/logo_stuff/paths.txt", "r")
>
> for x in pathFile:
>   if len(re.findall(r"^\d+$", x.split("/")[-2])) > 0:  #make sure folder name is a number
>     n = re.findall(r"\d+", x.split("/")[-1])   #Grab number off file name
>     if len(n) > 0: dList[int(n[0])] = x[:-1] + "<::>LOGO" + n[0] + "\n"
>
> pathFile.close()
>
> keyList = dList.keys()
> keyList.sort()
>
> for x in keyList:
>   sortedList += dList[x]
>
> newFile = open("~/Desktop/logo_stuff/sortedPaths.txt", "w")
> newFile.write(sortedList)
> newFile.close()
>
Here's my attempt:

#!/usr/bin/python

import os
import re

# Search for the files

folder = "~/Desktop/logoFiles/"

pathList = []

for name in os.listdir(folder):
    path = os.path.join(folder, name)
    # If you want it to be case-insensitive then use
name.upper().startswith("LOGO")
    if os.path.isfile(path) and name.startswith("LOGO"):
        pathList.append(path)

dList = {}

for x in pathList:
    parts = x.split("/")
    if parts[-2].isdigit():  # Make sure folder name is a number
        n = re.findall(r"(\d+)$", parts[-1])   # Grab number off file
name
        if n:
            dList[int(n[0])] = "%s<::>LOGO%s\n" % (x, n[0])

keyList = dList.keys()
keyList.sort()

sortedList = "".join(dList[x] for x in keyList)

newFile = open("~/Desktop/logo_stuff/sortedPaths.txt", "w")
newFile.write(sortedList)
newFile.close()




More information about the Python-list mailing list