I have a simple program that takes an ID number and prints information for the person matching the ID. The information is stored in a .dat file, with one ID number per line.
The problem is that my program is also reading the newline character \n from the file. I have tried the 'name'.split() method, but this doesn't seem to work for a list.
My program:
from time import localtime, strftime files = open("grades.dat") request = open("requests.dat", "w") lists = files.readlines() grades = [] for i in range(len(lists)): grades.append(lists[i].split(",")) cont = "y" while cont == "y" or cont == "Y": answer = raw_input("Please enter the Student I.D. of whom you are looking: ") for i in range(len(grades)): if answer == grades[i][0]: print grades[i][1] + ", " + grades[i][2] + (" "*6) + grades[i][0] + (" "*6) + grades[i][3] time = strftime("%a, %b %d %Y %H:%M:%S", localtime()) print time print "Exams - " + grades[i][11] + ", " + grades[i][12] + ", " + grades[i][13] print "Homework - " + grades[i][4] + ", " + grades[i][5] + ", " + grades[i][6] + ", " + grades[i][7] + ", " +grades[i][8] + ", " + grades[i][9] + ", " + grades[i][10] total = int(grades[i][4]) + int(grades[i][5]) + int(grades[i][6]) + int(grades[i][7]) + int(grades[i][8]) + int(grades[i][9]) + int(grades[i][10]) + int(grades[i][11]) + int(grades[i][12]) + int(grades[i][13]) print "Total points earned - " + str(total) grade = float(total) / 550 grade = grade * 100 if grade >= 90: print "Grade: " + str(grade) + ", that is equal to an A." elif grade >= 80 and grade < 90: print "Grade: " + str('%.2f' %grade) + ", that is equal to a B." elif grade >= 70 and grade < 80: print "Grade: " + str('%.2f' %grade) + ", that is equal to a C." elif grade >= 60 and grade < 70: print "Grade: " + str('%.2f' %grade) + ", that is equal to a D." else: print "Grade: " + str('%.2f' %grade) + ", that is equal to an F." request.write(grades[i][0] + " " + grades[i][1] + ", " + grades [i][2] + " " + time) request.write("\n") print cont = raw_input("Would you like to search again? ") if cont != "y" or cont != "Y": print "Goodbye."
You could actually put the newlines to good use by reading the entire file into memory as a single long string and then use them to split that into the list of grades by using the string splitlines() method which, by default, removes them in the process. with open("grades. dat") as file: grades = [line.
If you want to strip the newline character \n from each line when adding it to a list you can use the strip() method within a list comprehension: with open('file. txt') as f: lines = [ line.
str.strip()
returns a string with leading+trailing whitespace removed, .lstrip
and .rstrip
for only leading and trailing respectively.
grades.append(lists[i].rstrip('\n').split(','))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With