Printing/writing an integer to a file

Ben Finney bignose+hates-spam at benfinney.id.au
Thu Nov 16 22:18:12 EST 2006


PS <mytempmailid at gmail.com> writes:

> Friends,

Please, don't send message bodies to public discussion forums in any
format other than plain text. HTML email in particular has wildly
differing implementations and renderings.

> I am new to python and did search on the web on how to achieve this:
> ( I am trying to append the line numbers to all the lines of a file for now)
> Thanks!!
> =================================================
> import os, sys
> fileName = os.path.join("C:", "temp", "x1.txt")
> fileobject = open(fileName, 'r')
> outputDir = "C://temp//"
> linenumber = 0
> fileName1 = outputDir + " x2.txt"

You've used 'os.path.join' corretly above; you should use that any
time you want to compose a file path.

    output_dir = "C://temp//"
    out_file_name = os.path.join(output_dir, "x2.txt")

> fileobject1 = open(fileName1, 'w')
> while (1):
>     L = fileobject.readline()
>     if L=="":
>         print "**Done"
>         break

A file object is iterable, returning a line of text each time. This
means you don't need to manually loop and extract each line; you can
write this loop as:

    out_file = open(out_file_name, 'w')
    for in_line in in_file:
        # process the line

>     linenumber += 1
>     fileobject1.write (ln)

The function call syntax doesn't allow a space between the function
name and the opening parenthesis.

You are referencing 'ln' without ever defining it. Presumably you mean
to use 'linenumber'.

          linenumber += 1
          out_file.write(linenumber)

>     fileobject1.write(":: "+ L)
>    
> fileobject1.close()
> =============================================================

Wrapping all this advice up::

    import os
    import sys

    in_file_name = os.path.join("C:", "temp", "x1.txt")
    in_file = open(in_file_name, 'r')
    out_dir = "C://temp//"
    out_file_name = os.path.join(out_dir, "x2.txt")
    out_file = open(out_file_name, 'w')

    linenumber = 0
    for in_line in in_file:
        linenumber += 1
        out_file.write(linenumber)
        out_file.write(":: " + in_line)

    out_file.close()
    in_file.close()
    print "**Done"

An improvement would be to use string formatting to construct the
output line:

    linenumber = 0
    for in_line in in_file:
        linenumber += 1
        out_line = "%d:: %s" % (linenumber, in_line)
        out_file.write(out_line)

This also means you're one easy step away from padding the line number
to a minimum width::

        out_line = "%06d:: %s" % (linenumber, in_line)

-- 
 \     "I must say that I find television very educational. The minute |
  `\   somebody turns it on, I go to the library and read a book."  -- |
_o__)                                                     Groucho Marx |
Ben Finney




More information about the Python-list mailing list