Python - delete blank lines of text at the end of the file
python, python-3.x
Solution
The `\n` essentially means "create another line"
So when you've removed all the lines that are `\n`, there's still the preceding line
the lines below me should be gone\n
Which again means "create another line", beyond the ones you've already removed
Since you say you can't use `rstrip`, you could end the loop with
file_out[-1] = file_out[-1].strip('\n')
to remove `\n` from the last element. Because `\n` can't exist anywhere else in a line, `rstrip` and `strip` will have the same effect
Or without any `strip` or `endswith`:
if file_out[-1][-1] == '\n':
file_out[-1] = file_out[-1][:-1]
Note that `\n` is a single character, ordinal `0x0a` as hex, not two characters `\` and `n`, ordinals `0x5c` and `0x6e`. That is why we use `-1` and not `-2`
Problem
I am writing a script that modifies any text files. It replaces white space lines with blank lines. It erases the blank lines at the end of the file. The image shows the output I want. I am able to get very close to the desired output. The problem is that I cannot get rid of the last blank line. I think this has something to do with the last line. e.g `' the lines below me should be gone` actually looks like this `' the lines below me should be gone\n'` It looks like new lines are created on the previous line. e.g if line 4 has `\n` than line 5 will actually be the blank line not line 4. I should note that I can't use `rstrip` or `strip` My code so far. ``` def clean_file(filename): # function to check if the line can be deleted def is_all_whitespace(line): for char in line: if char != ' ' and char != '\n': return False return True # generates the new lines with open(filename, 'r') as file: file_out = [] for line in file: if is_all_whitespace(line): line = '\n' file_out.append(line) # removes whitespaces at the end of file while file_out[-1] == '\n': # while the last item in lst is blank file_out.pop(-1) # removes last element # writes the new the output to file with open(filename, 'w') as file: file.write(''.join(file_out)) clean_file('test.txt') ```