Here are various optimisations and applications of proper Python style to make your code a lot neater. I've put in some optional code using the csv
module, which is more desirable than parsing it manually. I've also put in a bit of namedtuple
goodness, but I don't use the attributes that then provides. Names of the parts of the namedtuple are inaccurate,
you'll need to correct them.
import csv
from collections import namedtuple
from time import localtime, strftime
# Method one, reading the file into lists manually [less desirable]
with open['grades.dat'] as files:
grades = [[e.strip[] for e in s.split[',']] for s in files]
# Method two, using csv and namedtuple
StudentRecord = namedtuple['StudentRecord', 'id, lastname, firstname, something, homework1, homework2, homework3, homework4, homework5, homework6, homework7, exam1, exam2, exam3']
grades = map[StudentRecord._make, csv.reader[open['grades.dat']]]
# Now you could have student.id, student.lastname, etc.
# Skipping the namedtuple, you could do grades = map[tuple, csv.reader[open['grades.dat']]]
request = open['requests.dat', 'w']
cont = 'y'
while cont.lower[] == 'y':
answer = raw_input['Please enter the Student I.D. of whom you are looking: ']
for student in grades:
if answer == student[0]:
print '%s, %s %s %s' % [student[1], student[2], student[0], student[3]]
time = strftime['%a, %b %d %Y %H:%M:%S', localtime[]]
print time
print 'Exams - %s, %s, %s' % student[11:14]
print 'Homework - %s, %s, %s, %s, %s, %s, %s' % student[4:11]
total = sum[int[x] for x in student[4:14]]
print 'Total points earned - %d' % total
grade = total / 5.5
if grade >= 90:
letter = 'an A'
elif grade >= 80:
letter = 'a B'
elif grade >= 70:
letter = 'a C'
elif grade >= 60:
letter = 'a D'
else:
letter = 'an F'
if letter = 'an A':
print 'Grade: %s, that is equal to %s.' % [grade, letter]
else:
print 'Grade: %.2f, that is equal to %s.' % [grade, letter]
request.write['%s %s, %s %s\n' % [student[0], student[1], student[2], time]]
print
cont = raw_input['Would you like to search again? ']
print 'Goodbye.'
Created: July-01, 2021 | Updated: August-10, 2021 File handling such as editing a file, opening a file, and reading a file can easily be carried out in Python. Reading a file in Python is a very common task that any user performs before making any changes to the file.strip[]
and the rstrip[]
Methods to Read a Line Without a Newline in Pythonsplitlines
and the split[]
Methods to Read a Line Without a Newline in Pythonslicing
or the []
Operator to Read a Line Without a Newline in Pythonreplace[]
Method to Read a Line Without a Newline in Python
While reading the file, the
new line character \n
is used to denote the end of a file and the beginning of the next line. This tutorial will demonstrate how to readline without a newline in Python.
Use the strip[]
and the rstrip[]
Methods to Read a Line Without a Newline in Python
The strip[]
method in Python helps in omitting the spaces that are present at the beginning [leading] and at the end [trailing]. Besides
white spaces, the strip[]
method also includes the newline characters.
Here’s an example you can follow.
with open["randomfile.txt", "r"] as file:
newline_break = ""
for readline in file:
line_strip = readline.strip[]
newline_break += line_strip
print[newline_break]
The open[]
is used to open the file. Note that the strip[]
method will get rid of the newline and the whitespaces at the beginning and the end in the example above. To keep the whitespaces and just omit the newline, the \n
command is passed as an argument or a parameter to the strip[]
method.
We can also use the rstrip[]
method because the strip[]
method
omits both the leading and the trailing spaces. On the other hand, the rstrip[]
method just removes the trailing spaces or characters. This method is useful because the newline is present at the end of every string. We can also mention the newline character by \n
.
Follow this example below.
with open["randomfile.txt", "r"] as file:
newline_break = ""
for readline in file:
line_strip = line.rstrip['\n']
newline_break += line_strip
print[newline_break]
Use the splitlines
and the split[]
Methods to Read a Line Without a Newline in Python
The
splitlines[]
method in Python helps split a set of strings into a list. Each string in the set of the string is an element of the list. Thus, the splitlines[]
method splits the string wherever the newline is present.
with open["randomfile.txt", "r"] as file:
readline=file.read[].splitlines[]
print[readline]
Here, note that the point where the split takes place is not mentioned. So, to mention the point where the split should take place manually, the split[]
method is used. This method performs the same task as the splitlines[]
method, but it is a little more precise.
with open["randomfile.txt", "r"] as file:
readline=file.read[].split["\n"]
print[readline]
Use slicing
or the []
Operator to Read a Line Without a Newline in Python
The slicing
operator in Python helps in accessing different parts of a sequence or string separately. The slicing
operator is defined as: string[starting index : ending index : step value]
.
Here’s an example you can follow.
with open["randomfile.txt", "r"] as file:
newline_break = ""
for readline in file:
line_strip = line[:-1]
newline_break += line_strip
print[newline_break]
Note that in the example above, we removed the last character of every
string with the help of negative slicing, for example, [:-1]
.
Use the replace[]
Method to Read a Line Without a Newline in Python
As the name suggests, the replace[]
is a built-in Python function used to return a string in which a substring with all its occurrences is replaced by another substring.
Follow this example below.
with open["randomfile.txt", "r"] as file:
newline_break = ""
for readline in file:
line_strip = line.replace['\n', " "]
newline_break += line_strip
print[newline_break]