Delete first line from file

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Tor Erik Sønvisen

    #1

    Delete first line from file

    Hi

    How can I read the first line of a file and then delete this line, so that
    line 2 is line 1 on next read?

    regards


  • Peter Nuttall

    #2
    Re: Delete first line from file

    On Tue, Mar 01, 2005 at 01:27:27PM +0100, Tor Erik S?nvisen wrote:[color=blue]
    > Hi
    >
    > How can I read the first line of a file and then delete this line, so that
    > line 2 is line 1 on next read?
    >
    > regards
    >
    >[/color]

    I think you can do something like:

    n=false
    f=file.open("") #stuff here
    g=[]
    for line in f.readlines():
    if n: g.append(line)
    n=true

    #write g to file

    if you are on a unix box, then using the standard untils might be a
    better idea.

    Pete

    Comment

    • Pieter Claerhout

      #3
      Re: Delete first line from file

      what about the following?

      f = open( 'file.txt', 'r' )
      lines = f.readlines()
      f.close()

      f = open( 'file.txt'.'w' )
      f.write( '\n'.join( lines[1:] ) )
      f.close()

      cheers,


      pieter

      On Tue, 1 Mar 2005 12:42:00 +0000, Peter Nuttall
      <p.s.nuttall@du rham.ac.uk> wrote:[color=blue]
      > On Tue, Mar 01, 2005 at 01:27:27PM +0100, Tor Erik S?nvisen wrote:[color=green]
      > > Hi
      > >
      > > How can I read the first line of a file and then delete this line, so that
      > > line 2 is line 1 on next read?
      > >
      > > regards
      > >
      > >[/color]
      >
      > I think you can do something like:
      >
      > n=false
      > f=file.open("") #stuff here
      > g=[]
      > for line in f.readlines():
      > if n: g.append(line)
      > n=true
      >
      > #write g to file
      >
      > if you are on a unix box, then using the standard untils might be a
      > better idea.
      >
      > Pete
      >
      > --
      > http://mail.python.org/mailman/listinfo/python-list
      >[/color]


      --
      pieter claerhout . pieter@yellowdu ck.be . http://www.yellowduck.be/

      Comment

      • Jeff Sandys

        #4
        Re: Delete first line from file

        You describe the standard behavior, unless you close the file,
        is that what you want to do; open file, read line 1, close file,
        then open file, read line 2, close file? The other suggestions
        here destory content, do you want that?
        [color=blue][color=green][color=darkred]
        >>> f = open("D:/Pydev/test.txt")
        >>> f.readline()[/color][/color][/color]
        'line one\n'[color=blue][color=green][color=darkred]
        >>> f.readline()[/color][/color][/color]
        'line two\n'[color=blue][color=green][color=darkred]
        >>> f.readline()[/color][/color][/color]
        'line three\n'


        "Tor Erik Sønvisen" wrote:[color=blue]
        >
        > Hi
        >
        > How can I read the first line of a file and then delete this line, so that
        > line 2 is line 1 on next read?
        >
        > regards[/color]

        Comment

        • Jeff Sandys

          #5
          Re: Delete first line from file

          Here is a non-destructive way keeping track of the
          current file position when closing the file and
          re-open the file where you left off. You can
          always use seek(0) to go back to the beginning.

          # ---------------------- start of myfile class
          class myfile(file):
          myfiles = {}
          def __init__(self, fname, *args):
          file.__init__(s elf, fname, *args)
          if self.name in myfile.myfiles:
          pos = myfile.myfiles[fname]
          else:
          pos = 0
          return self.seek(pos)
          def close(self):
          myfile.myfiles[self.name] = self.tell()
          file.close(self )
          # ------------------------ end of myfile class

          Below is an example with a simple four line file.

          PythonWin 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)]
          on win32.
          Portions Copyright 1994-2001 Mark Hammond (mhammond@skipp inet.com.au) -
          see 'Help/About PythonWin' for further copyright information.[color=blue][color=green][color=darkred]
          >>> f = open("C:/Pydev/test.txt")
          >>> f.readlines()[/color][/color][/color]
          ['line one\n', 'line two\n', 'line three\n', 'last line\n'][color=blue][color=green][color=darkred]
          >>> ### short four line file
          >>> f.close()
          >>> from myfile import myfile
          >>> f = myfile("C:/Pydev/test.txt")
          >>> f.readline()[/color][/color][/color]
          'line one\n'[color=blue][color=green][color=darkred]
          >>> f.readline()[/color][/color][/color]
          'line two\n'[color=blue][color=green][color=darkred]
          >>> f.close()
          >>> ### test, is the file really closed?
          >>> f.readline()[/color][/color][/color]
          Traceback (most recent call last):
          File "<interacti ve input>", line 1, in ?
          ValueError: I/O operation on closed file[color=blue][color=green][color=darkred]
          >>> f = myfile("C:/Pydev/test.txt")
          >>> f.readline()[/color][/color][/color]
          'line three\n'[color=blue][color=green][color=darkred]
          >>> ### reopened file starts where it left off
          >>> f.readline()[/color][/color][/color]
          'last line\n'[color=blue][color=green][color=darkred]
          >>> f.close()
          >>> f = myfile("C:/Pydev/test.txt")
          >>> f.seek(0)
          >>> ### return to the beginning of the file
          >>> f.readline()[/color][/color][/color]
          'line one\n'[color=blue][color=green][color=darkred]
          >>>[/color][/color][/color]

          This turned out really cool,
          thanks for the good question,
          Jeff Sandys


          "Tor Erik Sønvisen" wrote:[color=blue]
          >
          > Hi
          >
          > How can I read the first line of a file and then delete this line, so that
          > line 2 is line 1 on next read?
          >
          > regards[/color]

          Comment

          Working...