How can one delete the very last line of a file with python?
Input File example:
hello
world
foo
bar
Output File example:
hello
world
foo
I've created the following code to find the number of lines in the file - but I do not know how to delete the specific line number. I'm new to python - so if there is an easier way - please tell me.
try:
file = open("file")
except IOError:
print "Failed to read file."
countLines = len(file.readlines())
EDIT:
I figured it out using a variety of answers: Mostly Strawberry's and something I saw in the web (sorry, I can't find the link).
#!/usr/bin/env python
import os, sys
readFile = open("file")
lines = readFile.readlines()
readFile.close()
w = open("file",'w')
w.writelines([item for item in lines[:-1]])
w.close()
You could use the above code and then:-
This would give you an array of lines containing all lines but the last one.
Assuming you have to do this in Python and that you have a large enough file that list slicing isn't sufficient, you can do it in a single pass over the file:
Not the most elegant code in the world but it gets the job done.
Basically it buffers each line in a file through the last_line variable, each iteration outputs the previous iterations line.
Because I routinely work with many-gigabyte files, looping through as mentioned in the answers didn't work for me. The solution I use:
here is my solution for linux users:
no need to read and iterate through the file in python.
On systems where file.truncate() works, you could do something like this:
According to my tests, file.tell() doesn't work when reading by line, presumably due to buffering confusing it. That's why this adds up the lengths of the lines to figure out positions. Note that this only works on systems where the line delimiter ends with '\n'.
This doesn't use python, but python's the wrong tool for the job if this is the only task you want. You can use the standard *nix utility
head
, and runwhich will copy all but the last line of filename to newfile.