[Tutor] Suggestions to improve this first effort?
bob gailer
bgailer at alum.rpi.edu
Sun Feb 17 03:55:20 CET 2008
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
More information about the Tutor
mailing list