Very basic Python question (strings, formats and escapes)
Question: I am starting to learn Python with an online guide, and I just did an exercise
that required me to write this script:

    
    
    from sys import argv
    
    script, filename = argv
    
    print "We're going to erase %r." % filename
    print "If you don't want that, hit CTRL-C (^C)."
    print "If you do want that, hit RETURN."
    
    raw_input("?")
    
    print "Opening the file..."
    target = open(filename, 'w')
    
    print "Truncating the file. Goodbye!"
    target.truncate()
    
    print "Now I'm going to ask you for three lines."
    
    line1 = raw_input("line 1: ")
    line2 = raw_input("line 2: ")
    line3 = raw_input("line 3: ")
    
    print "I'm going to write these to the file."
    
    target.write(line1)
    target.write("\n")
    target.write(line2)
    target.write("\n")
    target.write(line3)
    target.write("\n")
    
    print "And finally, we close it."
    target.close()
    

I got it to run fine, but then the guide said: "There's too much repetition in
this file. Use strings, formats, and escapes to print out line1, line2, and
line3 with just one target.write() command instead of 6."

I'm not sure how to do this. Can anyone help? Thanks!


Answer: The guide is suggesting creating a single string and writing it out rather
than calling`write()` six time which seems like good advice.

You've got three options.

You could concatentate the strings together like this:

    
    
    line1 + "\n" + line2 + "\n" + line3 + "\n"
    

or like this:

    
    
    "\n".join(line1,line2,line3) + "\n"
    

You could use old [string
formatting](http://docs.python.org/library/stdtypes.html#string-formatting) to
do it:

    
    
    "%s\n%s\n%s\n" % (line1,line2,line3)
    

Finally, you could use the [newer string
formatting](http://docs.python.org/library/string.html#formatstrings) used in
Python 3 and also available from Python 2.6:

    
    
    "{0}\n{1}\n{2}\n".format(line1,line2,line3)
    

I'd recommend using the last method because it's the most powerful when you
get the hang of it, which will give you:

    
    
    target.write("{0}\n{1}\n{2}\n".format(line1,line2,line3))
    

