Ask your own question, for FREE!
Computer Science 22 Online
OpenStudy (jadzia):

Python Help I'm not sure how to extract the numbers from the file. I'm sure that if I'll extract them, they will be considered as strings, so I also have to convert it to float. I just need help in extracting the numbers. The files are in the comments.

OpenStudy (jadzia):

OpenStudy (cybershadow):

You can split line at ":" character to get the floating point value by using ``` floatString =line.split(":",1)[1] ``` Now this floatString will be a string so you can use ``` floatValue =float(floatString) ``` to parse the float value from string You can also execute both commands in a single line ``` floatVal = float(line.split(":",1)[1]) ``` Let me know if this doesnt work for you , or you have some doubt.

OpenStudy (jadzia):

I tried doing the splitting first, but it says "list index out of range"

OpenStudy (cybershadow):

That would happen if there is no ":" in the line , make sure you use split after this line ``` if not line.startsWith("X-DSPAM-Confidence:") :continue floatString = line.split(":")[1] ``` dont add this splitting before that line.

OpenStudy (jadzia):

yes, that's what I did...

OpenStudy (cybershadow):

Why are you using 20 as index? When you'll split at ":" it will create an array of ["X-DSPAM-Confidence" , "whateverFloatValueYouHave"]. There are only two indexes 0 and 1.. Replace ``` floatString = line.split(":",1)[20] ``` with ``` floatString = line.split(":") [1] ```

OpenStudy (jadzia):

oh okay! Now, I just did that and now it says "bad input"

OpenStudy (cybershadow):

Bad input happens when indentation is not right in python... make sure you are using right indentation

OpenStudy (jadzia):

okay. I'm just wondering if it is okay to put it before the 'continue'?

OpenStudy (cybershadow):

No it's not.... we are checking if the line does not start with "X-DSPAM-Confidence:" then it would skip the rest of the code using Continue command. If we place it before continue , lines who doesnt contain any ":" will also call split() function and creates an array with single element , which would lead to "list index out of range errors again"

OpenStudy (cybershadow):

Following code should fulfil your requirement ``` fname = raw_input("Enter file name: ") fh = open (fname) count = 0 total = 0 for line in fh: line = line.rstrip() count = count +1 if not line.startswith("X-DSPAM-Confidence:"):continue floatVal = float(line.split(":",1)[1]) #print floatVal total = total + floatVal average = total/count print "Average spam confidence:",average ```

OpenStudy (jadzia):

thanks! I just have to adjust the average but I can manage it from here. Thank you so much

OpenStudy (cybershadow):

Glad to help :)

Can't find your answer? Make a FREE account and ask your own questions, OR help others and earn volunteer hours!

Join our real-time social learning platform and learn together with your friends!
Can't find your answer? Make a FREE account and ask your own questions, OR help others and earn volunteer hours!

Join our real-time social learning platform and learn together with your friends!