write a loopin one line; process file paths

bonono at gmail.com bonono at gmail.com
Wed Oct 19 00:32:37 EDT 2005


what do you mean by one line ? Using map/filter, I believe it is
possible.

Somthing like:

map(lambda (s,f): os.path.exists(f) and f or s,
    map(lambda x: (x, re.replace(x, "-s","")), imgPaths)

My regex is a bit rusty but I hope you got the idea of what I am trying
to do. If there is a way to make the re return without destroying x,
the outer map is not needed I believe(that is run it twice, once for
getting the filename to do the testing, then again based on the testing
result).

Xah Lee wrote:
> is there a way to condense the following loop into one line?
>
> # -*- coding: utf-8 -*-
> # python
>
> import re, os.path
>
> imgPaths=[u'/Users/t/web/Periodic_dosage_dir/lanci/t4/oh/DSCN2059m-s.jpg',
> u'/Users/t/web/Periodic_dosage_dir/lanci/t4/oh/DSCN2062m-s.jpg',
> u'/Users/t/web/Periodic_dosage_dir/lanci/t4/oh/DSCN2097m-s.jpg',
> u'/Users/t/web/Periodic_dosage_dir/lanci/t4/oh/DSCN2099m-s.jpg',
> u'/Users/t/web/Icons_dir/icon_sum.gif']
>
> # change the image path to the full sized image, if it exists
> # that is, if image ends in -s.jpg, find one without the '-s'.
> temp=imgPaths[:]
> imgPaths=[]
> for myPath in temp:
>     p=myPath
>     (dirName, fileName) = os.path.split(myPath)
>     (fileBaseName, fileExtension)=os.path.splitext(fileName)
>     if(re.search(r'-s$',fileBaseName,re.U)):
>         p2=os.path.join(dirName,fileBaseName[0:-2]) + fileExtension
>         if os.path.exists(p2): p=p2
>     imgPaths.append(p)
>
> temp=[]
> print imgPaths
> 
>  Xah
>  xah at xahlee.org
>http://xahlee.org/




More information about the Python-list mailing list