Read from file into array of records

Method 1 (SQA)

  • This method uses “arrays” of a set size and datatype.
  • The file is explicitly opened and closed
  • Program will crash if there are not enough data lines in the file. Additional data lines will be ignored.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from dataclasses import dataclass
 
DATA_FILE = 'students.csv'
NUMBER_OF_STUDENTS = 4
 
@dataclass
class Student():
    name: str=''
    mark: int=0
 
def read_data_from_file():
    # create array of default records
    students = [Student() for student in range(NUMBER_OF_STUDENTS)]
  
    # open file for reading
    f=open(DATA_FILE, 'r')
  
    # read data for every student
    for student in range(NUMBER_OF_STUDENTS):
        # read and decode line from file
        line = f.readline()
        line = line.strip('n')
        line = line.split(',')
  
        # insert data into arrays
        students[student].name = line[0]
        students[student].mark = int(line[1])
 
    # close data file
    f.close()
      
    return students
  
#MAIN PROGRAM
students = read_data_from_file()
 
for student in students:
    print(student.name, student.mark)
    

Method 2 (Pythonic)

  • This method appends data onto lists
  • The file is closed automatically when the with loop completes
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from dataclasses import dataclass
 
DATA_FILE = 'students.csv'
 
@dataclass
class Student():
    name: str=''
    mark: int=0
     
def read_data_from_file(): 
    # create empty list
    students = []
   
    # open file for reading
    with open(DATA_FILE, 'r') as f:
        # go through every line of data
        for line in f.readlines():
  
            # decode the line
            line = line.strip('n')
            line = line.split(',')
   
            # create and add record to list
            name = line[0]
            mark = int(line[1])
            new_student = Student(name, mark)
            students.append(new_student)
   
    return students
   
#MAIN PROGRAM
students = read_data_from_file()
 
for student in students:
    print(student.name, student.mark)