On Mar 19, 8:51 am, digz <digvijo...@gmail.com> wrote: > Hi, > I am trying to convert a | delimited file to fixed width by right > padding with spaces, Here is how I have written the program , just get > the feeling this can be done in a much better ( python functional ) > way rather than the procedural code i have below . Any help > appreciated > > #!/usr/bin/python > def rightFill(fillString, toLength, fillChar): > return fillString+''.join([fillChar for x in range(len > (fillString),toLength)]) > > fieldWidth=[ 14, 6, 18, 21, 21,4, 6 ]; > > file = open("/home/chatdi/input.csv", "r"); > lines = file.readlines() > file.close() > > out = open( "/home/chatdi/ouptut.csv", 'w') > for line in lines: > line = line[:-1] > index = 0 > for token in line.split('|'): > paddedToken = rightFill(token, fieldWidth[index], ' ' ) > out.write( paddedToken ) > index = index + 1 > out.write("\n")
Caveat: none of the solutions (including mine) deal with the case of the field being longer than the width. You might want to throw an exception. I use the csv module to do the reading of the file, i am going to do some testing to see if i can set the delimiter to '' so that i can also use it for the output. For now this should work. http://docs.python.org/library/csv.html import csv fieldWidth=[ 14, 6, 18, 21, 21,4, 6 ]; csvfilepath = 'somefile.csv' outcsvfilepath = 'someoutfile.csv' endl = '\n' f = open(csvfilepath) outf = open(outcsvfilepath) csvfile = csv.reader(f,delimiter = '|') for row in csvfile: outrow = [ field + fillchar * (width - len(field)) for width, field in zip(fieldWidth,row)] outcsv.write( ''.join(outrow)) outcsv.write( endl ) f.close() outf.close() -- http://mail.python.org/mailman/listinfo/python-list