codeKiller
codeKiller

Reputation: 5739

adding a line to a txt file

I am trying to add a line to the end of a txt file. I have been reading some posts here and trying differents options, but, for some reason, the new line is neved added after the last one, it is just appended next to the last one.

So I was wondering what I am doing wrong....here I am showing my tests:

TEST 1:

#newProt is a new data entered by the user in this case 12345
exists = False
f = open('protocols.txt', 'a+')
for line in f:
    if newProt == line:
        exists = True
        
if not exists:
    f.write(newProt)
f.close()

txt file after this code:

2sde45

21145

we34z12345

TEST 2:

exists = False
with open('protocols.txt', 'r+') as f:
    for line in f:
        if newProt == line:
            exists = True
            
    if not exists:
        f.write(newProt)

txt file after this code: exactly the same as above...

And, like this, I have tested some combinations of letters to open the file, rb+, w, etc but for some reason I never get the desired output txt file:

2sde45

21145

we34z

12345

So I do not know what I am doing wrong, I am following some examples I gor from some other posts here.

Upvotes: 2

Views: 224

Answers (2)

fr1tz
fr1tz

Reputation: 8384

Try this:

exists = False
f = open('protocols.txt', 'a+')
for line in f:
    if newProt == line:
        exists = True

if not exists:
    f.write('\n' + newProt)
f.close()

This adds the new line character to the end of the file then adds 'newProt'.

EDIT:

The reason why your code did not produce the desired result is because you were simply writing a string to the file. New lines in text are not really 'in' the text file. The text file is literally a series of bytes known as chars. The reason why various applications such as text editors show you new lines is because it interprets certain characters as formatting elements rather than letters or numbers.

'\n' is one such formatting character (in the ASCII standard), and it tells your favorite text editor to start a new line. There are others such as '\t' which makes a tab.

Have a look at the wiki article on Newline character for more info

Upvotes: 3

Ekta
Ekta

Reputation: 438

You can use f.seek(-x,x), reach the last line and then f.write().

Otherwise my understanding is if you open a file in "a" (append) mode, it'll anyways be written in the end

Refer to this link: Appending line to a existing file having extra new line in Python

Upvotes: 0

Related Questions