CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Serialization


  1. Reading and Writing CSV Files
    import csv def readCsv(path): with open(path, 'rt') as f: # returns data as a table (2d list) return list(csv.reader(f)) def writeCsv(path, data): # data is a table (2d list) with open(path, 'wt', newline='') as f: csv.writer(f).writerows(data) data = [ [ 'name', 'age', 'favorite-color' ], [ 'ann', '32', 'green' ], [ 'ben', '25', 'blue' ], [ 'cam', '43', 'purple' ] ] path = 'myData.csv' writeCsv(path, data) # careful, this overwrites the file if it exists! print(f'Open the first {path} and verify that it looks right.') input('Press enter to continue --> ') dataRead = readCsv(path) assert(data == dataRead) print('Data read matches original data!')

  2. Issue: CSV Files do not preserve types
    import csv def readCsv(path): with open(path, 'rt') as f: # returns data as a table (2d list) return list(csv.reader(f)) def writeCsv(path, data): # data is a table (2d list) with open(path, 'wt', newline='') as f: csv.writer(f).writerows(data) data = [ [ 'name', 'age', 'favorite-color' ], [ 'ann', 32, 'green' ], [ 'ben', 25, 'blue' ], [ 'cam', 43, 'purple' ] ] path = 'myData.csv' writeCsv(path, data) # careful, this overwrites the file if it exists! print(f'Open the first {path} and verify that it looks right.') input('Press enter to continue --> ') dataRead = readCsv(path) assert(data != dataRead) print('Data read DOES NOT MATCH original data!')

  3. Alternative: JSON files
    # This works with dicts, lists, strings, ints, floats, and booleans. import json def readJson(path): with open(path, 'rt') as f: return json.loads(f.read()) def writeJson(path, data): with open(path, 'wt') as f: f.write(json.dumps(data)) data = [ [ 'name', 'age', 'favorite-color' ], [ 'ann', 32, 'green' ], [ 'ben', 25, 'blue' ], [ 'cam', 43, 'purple' ] ] path = 'myData.json' writeJson(path, data) # careful, this overwrites the file if it exists! print(f'Open the first {path} and verify that it looks right.') input('Press enter to continue --> ') dataRead = readJson(path) assert(data == dataRead) print('Data read DOES MATCH original data! Woohoo!')