[perl-python] 20050121 file reading & writing

Discussion in 'Python' started by Xah Lee, Jan 22, 2005.

  1. Xah Lee

    Xah Lee Guest

    # -*- coding: utf-8 -*-
    # Python

    # to open a file and write to file
    # do

    f=open('xfile.txt','w')
    # this creates a file "object" and name it f.

    # the second argument of open can be
    # 'w' for write (overwrite exsiting file)
    # 'a' for append (ditto)
    # 'r' or read only


    # to actually print to file or read from
    # file, one uses methods of file
    # objects. e.g.

    # reading entire file
    # text = f.read()

    # reading the one line
    # line = f.realine()

    # reading entire file as a list, of lines
    # mylist = f.readlines()

    # to write to file, do
    f.write('yay, first line!\n')

    # when you are done, close the file
    f.close()

    # closing files saves memory and is
    # proper in large programs.

    # see
    # http://python.org/doc/2.3.4/tut/node9.html

    # or in Python terminal,
    # type help() then topic FILES

    # try to write a program that read in a
    # file and print it to a new file.

    ------------------------
    # in perl, similar functionality exists.
    # their construct is quite varied.

    # example of reading in file
    # and print it out
    # (first, save this file as x.pl)
    open(f,"<x.pl") or die "error: $!";
    while ($line = <f>) {print $line}
    close(f) or die "error: $!";
    print "am printing myself\n";

    # the above is a so called "idiom"
    # meaning that it is the way such is
    # done in a particular language, as in
    # English.

    # note, the f really should be F in Perl
    # by some references, but can also be
    # lower case f or even "f". All are not
    # uncommon. There is no clear reason for
    # why or what should be or what
    # is the difference. Usually it's
    # not worthwhile to question in
    # Perl. ">x.pl" would be for write to
    # file. The <f> tells perl the file
    # object, and when Perl sees t=<> it
    # reads a line. (usually, but technically
    # depending on some predefined
    # variables...) The f they call "file handle".
    # ... see
    # perldoc -tf open
    # to begin understanding.

    ------------
    Note: this post is from the Perl-Python a-day mailing list at
    http://groups.yahoo.com/group/perl-python/
    to subscribe, send an email to
    if you are reading it on a web page, program examples may not run
    because html conversion often breaks the code.
    Xah

    http://xahlee.org/PageTwo_dir/more.html
     
    Xah Lee, Jan 22, 2005
    #1
    1. Advertising

  2. Xah Lee wrote:

    > # the second argument of open can be
    > # 'w' for write (overwrite exsiting file)
    > # 'a' for append (ditto)
    > # 'r' or read only


    are you sure you didn't forget something?

    > # reading the one line
    > # line = f.realine()


    wrong

    > [...]


    Maybe you didn't get the fact the you won't see a flame starting between
    python people and perl friends?

    throw yourself somewhere and... Xah.flush()
    --
    Gian Mario Tagliaretti
    PyGTK GUI programming
    http://www.parafernalia.org/pygtk/
     
    Gian Mario Tagliaretti, Jan 22, 2005
    #2
    1. Advertising

  3. Xah Lee

    Bob Smith Guest

    Xah Lee wrote:

    > # reading entire file as a list, of lines
    > # mylist = f.readlines()



    To do this efficiently on a large file (dozens or hundreds of megs), you
    should use the 'sizehint' parameter so as not to use too much memory:

    sizehint = 0
    mylist = f.readlines(sizehint)
     
    Bob Smith, Jan 22, 2005
    #3
  4. Bob Smith wrote:

    > To do this efficiently on a large file (dozens or hundreds of megs), you
    > should use the 'sizehint' parameter so as not to use too much memory:
    >
    > sizehint = 0
    > mylist = f.readlines(sizehint)


    It doesn't make any difference. .readlines reads the entire file into
    memory at once.

    --
    Erik Max Francis && && http://www.alcyone.com/max/
    San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
    Can I lay with you / As your wife
    -- India Arie
     
    Erik Max Francis, Jan 23, 2005
    #4
  5. Xah Lee

    Bob Smith Guest

    Erik Max Francis wrote:
    > Bob Smith wrote:
    >
    >> To do this efficiently on a large file (dozens or hundreds of megs),
    >> you should use the 'sizehint' parameter so as not to use too much memory:
    >>
    >> sizehint = 0
    >> mylist = f.readlines(sizehint)

    >
    >
    > It doesn't make any difference. .readlines reads the entire file into
    > memory at once.
    >


    Are you sure, the docs say this:

    "f.readlines() returns a list containing all the lines of data in the
    file. If given an optional parameter sizehint, it reads that many bytes
    from the file and enough more to complete a line, and returns the lines
    from that. This is often used to allow efficient reading of a large file
    by lines, but without having to load the entire file in memory. Only
    complete lines will be returned."

    http://docs.python.org/tut/node9.html
     
    Bob Smith, Jan 23, 2005
    #5
  6. Erik Max Francis wrote:

    >> To do this efficiently on a large file (dozens or hundreds of megs), you should use the
    >> 'sizehint' parameter so as not to use too much memory:
    >>
    >> sizehint = 0
    >> mylist = f.readlines(sizehint)

    >
    > It doesn't make any difference. .readlines reads the entire file into memory at once.


    except when it doesn't:

    readlines([sizehint])

    Read until EOF using readline() and return a list containing the
    lines thus read. If the optional sizehint argument is present, instead
    of reading up to EOF, whole lines totalling approximately sizehint
    bytes (possibly after rounding up to an internal buffer size) are read.
    Objects implementing a file-like interface may choose to ignore
    sizehint if it cannot be implemented, or cannot be implemented
    efficiently.

    >>> f = open("ot.xml")
    >>> s = f.readlines(1000)
    >>> len(s)

    157

    >>> f = open("ot.xml")
    >>> s = f.readlines()
    >>> len(s)

    48560

    </F>
     
    Fredrik Lundh, Jan 23, 2005
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. HNguyen
    Replies:
    4
    Views:
    2,423
    HNguyen
    Dec 21, 2004
  2. Patrick Maupin
    Replies:
    2
    Views:
    632
    Patrick Maupin
    Nov 27, 2009
  3. Xah Lee
    Replies:
    2
    Views:
    116
    Anno Siegel
    Jan 23, 2005
  4. Steve Howell
    Replies:
    2
    Views:
    963
    Dennis Lee Bieber
    Mar 27, 2012
  5. Steven D'Aprano
    Replies:
    1
    Views:
    144
Loading...

Share This Page