[Tutor] a quick Q: how to use for loop to read a series of files with .doc end
Dave Angel
d at davea.name
Wed Oct 5 04:45:49 CEST 2011
On 10/04/2011 10:22 PM, lina wrote:
> On Wed, Oct 5, 2011 at 1:30 AM, Prasad, Ramit<ramit.prasad at jpmorgan.com>wrote:
>
>>> But I still don't know how to get the
>>> statistic result of each column,
>> Thanks.
>> try:
>> cols = len( text[0] ) # Find out how many columns there are (assuming
>> each row has the same number of columns)
>> except IndexError:
>> raise # This will make sure you can see the error while developing;
>>
> This part:
>
> It's showed up:
>
> except IndexError:
Best guess I can make is that the line "each row has..." needs a # in
front of it. or maybe your code looks like the following, which has no
try block at all.
The except clause has to be the first line at the same indentation as
the try line it's protecting.
> ^
> SyntaxError: invalid syntax
>
> for fileName in os.listdir("."):
> if os.path.isfile(fileName) and os.path.splitext(fileName)[1]==".xpm":
> filedata = open(fileName)
> text=filedata.readlines()
> cols = len(text[0])
> except IndexError:
> print ("Index Error.")
> result=[]
> for idx in xrange(cols):
> results.append(0)
> for line in text:
> for col_idx, field in enumerate(line):
> if token in field:
> results[col_idx]+=1
> for index in col_idx:
> print results[index]
>
> it showed up:
>
> print results[]
> ^
> SyntaxError: invalid syntax
>
> Sorry, I am still lack deep understanding about something basic. Thanks for
> your patience.
>
>
Simplest answer here is you might have accidentally run this under
Python 3.x. That would explain the syntax error on the print
function. Pick a single version and stick to it. In fact, you might
even put a version test at the beginning of the code to give an
immediate error.
But you do have many other problems with the code. One is that this no
longer does anything useful with multiple tokens. (See my last email to
see an approach that handles multiple tokens). Another is that you mix
result and results. They're entirely distinct. So pick one spelling
and stick to it. Another is that for the "for index" is indented wrong,
and uses the wrong limit value. As it stands, it's trying to iterate
over an integer. You probably want to replace the whole phrase with
something like for item in results: print item
This example illustrates one reason why it's a mistake to write all the
code at top level. This code should probably be at least 4 functions,
with each one handling one abstraction.
Further, while you're developing, you should probably put the test data
into a literal (probably a multiline literal using triplequotes), so you
can experiment easily with changes to the data, and see how it results.
--
DaveA
More information about the Tutor
mailing list