C B Gambrell wrote: > I am just getting started with Python and wonder if folks here might > look at this attempt in Python and offer me your thoughts. > > Several years ago I used QBasic to convert one our reports to a csv > file so we could import the data into another program. That very old > QBasic script has been serving me well but I decided to try to make it > work in Python. I used the same logic in Python I had used in QBasic > and the resulting output is exactly what I need. > > Here is how the data looks in the input file. > > ===== > ===== > .block > name 1 > address1 > city st > 11111 > .endblock > .report > > > .block > name 2 > address 2 > city st > 11111 > .endblock > .report > ==== > ==== > > The input file goes on for several thousand addresses. > > Here is what worked for me in QBasic. > > === > === > clin1$ = "" > clin2$ = "" > infile$ = "ad.txt" > outfile$ = "ad.csv" > ' > OPEN infile$ FOR INPUT AS #1 > OPEN outfile$ FOR OUTPUT AS #2 > ' > DO WHILE NOT EOF(1) > LINE INPUT #1, lin$ > clin1$ = RTRIM$(LTRIM$(lin$)) > IF clin1$ = "" THEN > clin1$ = "" > ELSEIF clin1$ = ".report" THEN > clin1$ = "" > ELSEIF clin1$ = ".block" THEN > clin1$ = "" > ELSEIF clin1$ = ".endblock" THEN > WRITE #2, MID$(clin2$, 4) > PRINT MID$(clin2$, 4) > clin2$ = "" > ELSE > clin2$ = clin2$ + CHR$(34) + CHR$(44) + CHR$(34) + clin1$ > END IF > LOOP > END > ==== > ==== > > And here is my I got work for me in Python. > > === > === > import sys > infile=sys.argv[1] > outfile=sys.argv[1]+".csv" > > f1=open(infile) > f2=open(outfile, 'w') > > s2="" > > for line in f1: > s=line.strip() > if s=="": > continue > elif s==".block": > continue > elif s==".report": > continue > elif s==".endblock": > s="\n" > s2=s2[:-1]+s > f2.write(s2) > s2="" > continue > s2=s2+"\""+s+"\""+"," > > f1.close() > f2.close() > === > === > > The script works but what you suggest to improve the logic or make the > script more Pythonic? > Dunno if this is more Pythonic, but it's how I'd code it:
... f2 = open(outfile, 'w') for line in f1: if s.startswith(".block"): # start of block s2 = [] elif s==".endblock": f2.write(",".join(s2) + "\n") else: # data record s2.append('"%s"' % line.strip()) ... -- Bob Gailer 919-636-4239 Chapel Hill, NC _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor