- 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!')
- 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!')
- 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!')