As a complete example, consider something like the code below. I've added excessive comments to explain what each step is doing.
# Open the input file read-only...
with open('infile.txt', 'r') as infile:
# Skip the first 4 lines, and store them as "header" in case we need them...
# It's important that we use "next" here and _not_ infile.readline().
# readline and the file iteration methods ("for line in file") can't be mixed
header = [next(infile) for dummy in range(4)]
# Open the output file, overwriting whatever is there...
with open('outfile.txt', 'w') as outfile:
# Loop over the lines in the input file
for line in infile:
# Strip off leading and trailing whitespace (e.g "\n") and
# split on whitespace. This gives us a list of strings.
columns = line.strip().split()
# Write the 1st and 4th columns in each row as left-justified
# columns with a fixed-width of 8
outfile.write('{:8}{:8}\n'.format(columns[0], columns[3]))
If you're using an old version of python and wanted to avoid the with statements, you could write it like this:
# Open the input file read-only...
infile = open('infile.txt', 'r')
# Open the output file, overwriting whatever is there...
outfile = open('outfile.txt', 'w')
# Skip the first 4 lines, and store them as "header" in case we need them...
# It's important that we use "next" here and _not_ infile.readline().
# readline and the file iteration methods ("for line in file") can't be mixed
header = [next(infile) for dummy in range(4)]
# Loop over the lines in the input file
for line in infile:
# Strip off leading and trailing whitespace (e.g "\n") and
# split on whitespace. This gives us a list of strings.
columns = line.strip().split()
# Write the 1st and 4th columns in each row as left-justified
# columns with a fixed-width of 8
outfile.write('{:8}{:8}\n'.format(columns[0], columns[3]))
# Close the file objects once we're through with them..
# Python would close these automatically when the process ends, but it's a good
# idea to get in the habit of explicitly closing them once you don't need them.
# Otherwise, when you start writing code for longer-running processes, you'll
# inadvertently leave lots of file handles laying around
infile.close()
outfile.close()
However, it's a good idea to get into the habit of using with statements to handle file objects. They ensure that file handles will be closed automatically even if there's an error in your code. with statements are "context managers". They're very handy for a lot of things that would otherwise require "boilerplate" cleanup and/or entry code.