In <[EMAIL PROTECTED]>, Karyn Williams wrote: > I am new to Pyton. I am trying to modify and understand a script someone > else wrote. I am trying to make sense of the following code snippet. I know > line 7 would be best coded with regex.
What is line 7 in the snippet? > I first would like to understand what was coded originally. thelistOut > looks like a hash to me (I'm more familiar with perl). It's a list which contains tuples. Each tuple contains an integer and a list with one string that looks like a pathname. > Perhaps someone could translate from perl to python for me - not in code > but just in concept. Which Perl? You gave us Python!? > Here is the code. This script is reading the list thelistOut and then > removing any items in RSMlist and taking the remainder and putting them > in graphAddressOut with the formatting. There's nothing removed from `thelistOut`. Names where the filename/basename without the extension is in `RSMList` are not processed and added to `outputOut`. > This is a SAMPLE of what is in the lists referenced below in the loop: > > > thelistOut = [(632, > ['/usr/local/www/data-dist/mrtg/main/test/172.16.0.23_9.log']), (145, > ['/usr/local/www/data-dist/mrtg/main/test/172.16.0.23_13.log']), (0, > ['/usr/local/www/data-dist/mrtg/main/test/172.16.0.23_5.log'])] > > RSMList = ['172.16.0.1_1', '172.16.0.1_2', '172.16.0.1_3', > '172.16.0.1_4', '172.16.0.1_5'] > > > > #--------------------------Loop 1 ------------------------- > > w = 0 > while w < 45: The loop looks odd. Is it really a literal 45 here or are all elements of `thelistOut` processed? Then a for loop over the list if you don't need `w` for something other than indexing into the list or an `xrange()` object are much cleaner than using a while loop and updating the counter manually. That the second element of the tuple seems to be always a list with one item looks odd too. > fileOut = string.split(thelistOut[w][1][0],".log") > fileOutSplitedCommon = string.split(fileOut[0], "main/") > fileOut2D = string.split(fileOutSplitedCommon[1], "/") > fileOut = string.split(fileOut[0],"data-dist") This might be more readable and understandable if `os.path.splitext()` and `os.path.split()` where used. > if fileOut2D[1] in RSMList: > w = w + 1 > continue Might be cleaner to negate the test and use the remaining code as body of that ``if`` statement. > graphAddressOut = tag1 + logUrl + fileOut[1] + extention1 + tag2 > + > "<b>SWITCH: " + string.swapcase(fileOut2D[0]) + " & nbsp;PORT > ID: " + fileOut2D[1] + "</b><br>" + imgTitleTag + imgTag1 + logUrl + > fileOut[1] + extention2 + imgTag2 + tag3 + tag5 > outputOut.append(graphAddressOut) > strOut = strOut + graphAddressOut That's an unreadable mess. Better use string formatting. And last but not least: a hash is called dictionary in Python. Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list