[SPAM] It's ...

MRAB python at mrabarnett.plus.com
Wed Jun 24 22:44:27 CEST 2009


Angus Rodgers wrote:
[snip]
> This sort of thing seems to work, in the interpreter (for an 
> ASCII text file, named 'h071.txt', in the current directory):
> 
> stop = 3   # Tab stops every 3 characters
> from types import StringType   # Is this awkwardness necessary?
> detab = lambda s : StringType.expandtabs(s, stop)  # Or use def
> f = open('h071.txt')   # Do some stuff to f, perhaps, and then:
> f.seek(0)
> print ''.join(map(detab, f.xreadlines()))
> f.close()
> 
stop = 3   # Tab stops every 3 characters
detab = lambda s: s.expandtabs(stop)
f = open('h071.txt')   # Do some stuff to f, perhaps, and then:
# f.seek(0) # Not necessary
print ''.join(map(detab, f.xreadlines()))
f.close()

> Obviously, to turn this into a generally useful program, I need
> to learn to write to a new file, and how to parcel up the Python
> code, and write a script to apply the "detab" function to all the
> files found by searching a Windows directory, and replace the old
> files with the new ones; but, for the guts of the program, is this
> a reasonable way to write the code to strip tabs from a text file?
> 
> For writing the output file, this seems to work in the interpreter:
> 
> g = open('temp.txt', 'w')
> g.writelines(map(detab, f.xreadlines()))
> g.close()
> 
> In practice, does this avoid creating the whole string in memory
> at one time, as is done by using ''.join()? (I'll have to read up
> on "opaque sequence objects", which have only been mentioned once
> or twice in passing - another instance perhaps being an xrange()?)
> Not that that matters much in practice (in this simple case), but
> it seems elegant to avoid creating the whole output file at once.
> 
> OK, I'm just getting my feet wet, and I'll try not to ask too many
> silly questions!
> 
> First impressions are: (1) Python seems both elegant and practical;
> and (2) Beazley seems a pleasantly unfussy introduction for someone 
> with at least a little programming experience in other languages.
> 
STOP = 3  # Tab stops every 3 characters
in_file = open('h071.txt')
out_file = open('temp.txt', 'w')
for line in in_file:  # Iterates one line at a time
     out_file.write(line.expandtabs(STOP))
in_file.close()
out_file.close()



More information about the Python-list mailing list