def test_write_function_works(): """ Test if write() method behaves properly """ lsep = '\r\n' with putil.misc.TmpFile() as fname: putil.pcsv.write( fname, [['Input', 'Output'], [1, 2], [3, 4]], append=False ) written_data = _read(fname) assert written_data == 'Input,Output{0}1,2{0}3,4{0}'.format(lsep) with putil.misc.TmpFile() as fname: putil.pcsv.write( fname, [['Input', 'Output'], [1, 2], [3, 4]], append=False ) putil.pcsv.write(fname, [[5.0, 10]], append=True) written_data = _read(fname) assert written_data == 'Input,Output{0}1,2{0}3,4{0}5.0,10{0}'.format(lsep)
def test_write(self): """ Test write method behavior """ lsep = '\r\n' # Check saving filtered data with putil.misc.TmpFile(write_file) as fname: obj = putil.pcsv.CsvFile(fname=fname, dfilter={'Ctrl':1}) ofname = fname with putil.misc.TmpFile() as fname: obj.cfilter = 'Result' obj.write(fname=fname, filtered=True, append=False) written_data = _read(fname) assert written_data == 'Result{0}10{0}20{0}'.format(lsep) # Test default fname with renamed single column obj.rfilter = {'Ctrl':2} obj.write(filtered=True, append=False, header='MyCol') written_data = _read(ofname) assert written_data == 'MyCol{0}30{0}40{0}'.format(lsep) obj.reset_dfilter() # Test repeated columns obj.rfilter = {'Ctrl':2} obj.cfilter = ['Result', 'Ref', 'Result'] obj.write(filtered=True, append=False) written_data = _read(ofname) ref = 'Result,Ref,Result{0}30,4,30{0}40,5,40{0}'.format(lsep) assert written_data == ref obj.reset_dfilter() # Test repeated columns with renamed header obj.reset_dfilter('c') obj.rfilter = {'Ctrl':2} obj.write(filtered=True, append=False, header=['A', 'B', 'C']) written_data = _read(ofname) assert written_data == 'A,B,C{0}2,4,30{0}2,5,40{0}'.format(lsep) obj.reset_dfilter('R') # Check saving unfiltered data column-sliced and also that # default for append argument is False obj.cfilter = 'Result' with putil.misc.TmpFile() as fname: obj.write(fname=fname, filtered='c') written_data = _read(fname) ref = 'Result{0}10{0}20{0}30{0}40{0}50{0}'.format(lsep) assert written_data == ref # Check saving all data with putil.misc.TmpFile() as fname: obj.write(fname=fname, append=False) written_data = _read(fname) ref = ( 'Ctrl,Ref,Result{0}' '1,3,10{0}' '1,4,20{0}' '2,4,30{0}' '2,5,40{0}' '3,5,50{0}'.format(lsep) ) assert written_data == ref obj.cfilter = ['Ctrl', 'Result'] with putil.misc.TmpFile() as fname: obj.write(fname=fname, filtered=True, header=False, append=False) written_data = _read(fname) ref = '1,10{0}1,20{0}2,30{0}2,40{0}3,50{0}'.format(lsep) assert written_data == ref obj. cfilter = [0, 2] with putil.misc.TmpFile() as fname: obj.write(fname=fname, filtered=True, header=False, append=False) written_data = _read(fname) ref = '1,10{0}1,20{0}2,30{0}2,40{0}3,50{0}'.format(lsep) assert written_data == ref with putil.misc.TmpFile() as fname: obj.reset_dfilter() obj.rfilter = {'Result':[10, 30]} obj.write(fname=fname, filtered=True, header=True, append=False) obj.rfilter = {'Result':[20, 50]} obj.write(fname=fname, filtered=True, header=False, append=True) written_data = _read(fname) ref = ( 'Ctrl,Ref,Result{0}' '1,3,10{0}' '2,4,30{0}' '1,4,20{0}' '3,5,50{0}'.format(lsep) ) assert written_data == ref with putil.misc.TmpFile(write_data_start_file) as fname: obj = putil.pcsv.CsvFile(fname=fname) with putil.misc.TmpFile() as fname: obj.write(fname=fname) written_data = _read(fname) ref = "Ctrl,Ref,Result{0}2,'',30{0}2,5,40{0}3,5,50{0}".format(lsep) assert written_data == ref # Check file without header with putil.misc.TmpFile(write_no_header_file) as fname: obj = putil.pcsv.CsvFile(fname=fname, has_header=False) ofname = fname with putil.misc.TmpFile() as fname: obj.cfilter = 1 obj.write(fname=fname, filtered=True) written_data = _read(fname) assert written_data == '1{0}4{0}5{0}6{0}6{0}'.format(lsep) obj.rfilter = {0:1} with putil.misc.TmpFile() as fname: obj.cfilter = [1, 2] obj.write(fname=fname, filtered=True, header=False) written_data = _read(fname) assert written_data == '4,7{0}6,6{0}'.format(lsep) # Check None round trip with putil.misc.TmpFile(write_empty_cols) as fname: obj = putil.pcsv.CsvFile(fname=fname) assert obj.data() == [[1, None, 10], [1, 4, None]] with putil.misc.TmpFile() as fname: obj.write(fname, append=False) if sys.hexversion < 0x03000000: with open(fname, 'r') as fobj: data = fobj.readlines() else: with open(fname, 'r', newline='') as fobj: data = fobj.readlines() items = ['Col1,Col2,Col3{0}', "1,'',10{0}", "1,4,''{0}"] assert data == [item.format(lsep) for item in items]