24

I have a textfile.txt like this:

First Line
Second Line
Third Line
Fourth Line
Fifth Line
Sixth Line

How can I remove the first three lines and the last line most comfortable?

martineau
  • 112,593
  • 23
  • 157
  • 280
creativz
  • 9,749
  • 13
  • 37
  • 35

5 Answers5

42
with open('textfile.txt') as old, open('newfile.txt', 'w') as new:
    lines = old.readlines()
    new.writelines(lines[3:-1])
tripleee
  • 158,107
  • 27
  • 234
  • 292
SilentGhost
  • 287,765
  • 61
  • 300
  • 288
18

This one doesn't use readlines() so it is ideal for bigger sized files.

numline=3 #3 lines to skip
p=""
o=open("output.txt","a")
f=open("file")
for i in range(numline):
    f.next()
for line in f:
    if p:
        o.write(p)
    p=line
f.close()
o.close()

Since there's a sed answer, here's an awk one

$ awk 'NR>=4{if(p)print p;p=$0;}' file
Fourth Line
Fifth Line
John Kugelman
  • 330,190
  • 66
  • 504
  • 555
ghostdog74
  • 307,646
  • 55
  • 250
  • 337
5
data="".join(open("textfile.txt").readlines()[3:-1])
open("newfile.txt","wb").write(data)
YOU
  • 114,140
  • 31
  • 183
  • 213
1
f = open('file1.txt').readlines()

open('file1.txt', 'w').writelines(lines[4:])

This code snippet will delete first four line from fie name "file1.txt"

rahul kumar
  • 99
  • 1
  • 2
  • should be f = open('file1.txt').readlines() open('file1.txt', 'w').writelines(f[4:]) instead – quarkz May 19 '22 at 06:52
-4

No Python solution but since your problem is a classic, I present you a sed solution.

$ sed -n -e "4,5p" textfile.txt

Of course the address 4,5 only works for exactly your input and required output :)