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:

  1. remove blank rows
  2. remove rows value of column "b" not number
  3. 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

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -