python - How to perform multiple changes to a csv file without intervening writes -
i want perform multiple edits rows in csv file without making multiple writes output csv file.
i have csv need convert , clean specific format program use. example, i'd to:
- remove blank rows
- remove rows value of column "b" not number
- with new data, create new column , explode first part of values in column b new column
here's example of data:
"a","b","c","d","e" "apple","blah","1","","0.00" "ape","12_fun","53","25","1.00" "aloe","15_001","51","28",2.00"
i can figure out logic behind each process, can't figure out how perform each process without reading , writing file each time. i'm using csv module. there better way perform these steps @ once before writing final csv?
i define set of tests , set of processes.
if tests pass, processes applied, , final result written output:
import csv # # row tests # def test_notblank(row): return any(len(i) in row) def test_bnumeric(row): return row[1].isdigit() def do_tests(row, tests=[test_notblank, test_bnumeric]): return all(t(row) t in tests) # # row processing # def process_splitb(row): b = row[1].split('.') row[1] = b[0] row.append(b[1]) return row def do_processes(row, processes=[process_splitb]): p in processes: row = p(row) return row def main(): open("in.csv","rb") inf, open("out.csv","wb") outf: incsv = csv.reader(inf) outcsv = csv.writer(outf) outcsv.writerow(incsv.next()) # pass header row outcsv.writerows(do_processes(row) row in incsv if do_tests(row)) if __name__=="__main__": main()
Comments
Post a Comment