paceboard/scripts/utils/csv.py
2021-06-23 16:06:29 -04:00

53 lines
1.7 KiB
Python

### Util library for interacting with csv files
import csv
def readerWithFunction(filepath, function, arg=None):
"""Read from a csv and execute a function using each row. Return a sequential list of all values returned by the function.
filepath -- the path of the csv we're reading
function -- the function we're executing once per row
arg -- if the function takes an additional argument, we pass arg (default None)
"""
with open(filepath, newline="") as file:
reader = csv.reader(file, delimiter=",")
value = []
for row in reader:
if arg == None:
value.append(function(row))
else:
value.append(function(row, arg))
file.close()
return value
def dictWriterSingleDict(filepath, dict):
"""Completely rewrite a csv using the values in a single dictionary.
filepath -- the path of the csv, whether or not it exists
dict -- the dictionary to pull all values from
"""
with open(filepath, "w", newline="") as file:
dictWriter = csv.DictWriter(file, fieldnames=dict.keys(), delimiter=",")
dictWriter.writeheader()
dictWriter.writerow(dict)
file.close()
def getIndexOfField(filepath, field):
"""Get the index (column number) of a field in a csv.
filepath -- the path of the csv we're searching
field -- the field string we're looking for
"""
return readerWithFunction(filepath, sub_getIndexOfField, field)[0]
def sub_getIndexOfField(row, field):
"""Helper function for getIndexOfField() that can be passed to readerWithFunction().
row - the array representation of a csv row (presumably the fields row)
field - the field string we're looking for
"""
return row.index(field)