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.
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.
I tried doing the splitting first, but it says "list index out of range"
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.
yes, that's what I did...
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] ```
oh okay! Now, I just did that and now it says "bad input"
Bad input happens when indentation is not right in python... make sure you are using right indentation
okay. I'm just wondering if it is okay to put it before the 'continue'?
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"
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 ```
thanks! I just have to adjust the average but I can manage it from here. Thank you so much
Glad to help :)
Join our real-time social learning platform and learn together with your friends!