Вопрос: Как вы добавляете файл?


Как вы добавляете к файлу, а не переписываете его? Есть ли специальная функция, которая добавляется к файлу?


1166


источник


Ответы:


with open("test.txt", "a") as myfile:
    myfile.write("appended text")

1855



Вам нужно открыть файл в режиме добавления, установив «a» или «ab» в качестве режима. Видеть открытый() ,

Когда вы открываете режим «a», позиция записи будет всегда быть в конце файла (добавить). Вы можете открыть «a +», чтобы разрешить чтение, искать назад и читать (но все записи все равно будут в конце файла!).

Пример:

>>> with open('test1','wb') as f:
        f.write('test')
>>> with open('test1','ab') as f:
        f.write('koko')
>>> with open('test1','rb') as f:
        f.read()
'testkoko'

Заметка : Использование «a» - это не то же самое, что открытие с «w» и поиск конца файла - подумайте, что может произойти, если другая программа откроет файл и начнет писать между поиском и записью. В некоторых операционных системах открытие файла с помощью «a» гарантирует, что все ваши последующие записи будут добавляться атомарно в конец файла (даже по мере того, как файл будет расти другими способами записи).


Несколько подробнее о том, как работает режим «a» ( проверено только на Linux ). Даже если вы будете искать назад, каждая запись будет добавлена ​​в конец файла:

>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'

Фактически, fopen страница руководства состояния:

Открытие файла в режиме добавления (a в качестве первого символа режима)   заставляет все последующие операции записи в этот поток   end-of-file, как если бы он предшествовал вызову:

fseek(stream, 0, SEEK_END);

Старый упрощенный ответ (не используя with):

Пример: ( в реальной программе использование withзакрыть файл - видеть документация )

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'

156



Вы, вероятно, захотите пройти "a"как аргумент режима. См. Документы для открытый() ,

with open("foo", "a") as f:
    f.write("cool beans...")

Существуют другие перестановки аргумента mode для обновления (+), усечения (w) и двоичного (b) режима, но начиная с "a"это ваш лучший выбор.


32



Я всегда это делаю,

f = open('filename.txt', 'a')
f.write("stuff")
f.close()

Это просто, но очень полезно.


32



when we using this line open(filename, "a"), that a indicates the appending the file, that means allow to insert extra data to the existing file.

You can just use this following lines to append the text in your file

def FileSave(filename,content):
    with open(filename, "a") as myfile:
        myfile.write(content)

FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")

10



Python has many variations off of the main three modes, these three modes are:

'w'   write text
'r'   read text
'a'   append text

So to append to a file it's as easy as:

f = open('filename.txt', 'a') 
f.write('whatever you want to write here (in append mode) here.')

Then there are the modes that just make your code fewer lines:

'r+'  read + write text
'w+'  read + write text
'a+'  append + read text

Finally, there are the modes of reading/writing in binary format:

'rb'  read binary
'wb'  write binary
'ab'  append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary

9



Here's my script, which basically counts the number of lines, then appends, then counts them again so you have evidence it worked.

shortPath  = "../file_to_be_appended"
short = open(shortPath, 'r')

## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to" 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines initially" %(long_path,i)
long.close()

long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l: 
    try: 
        l = short.next() ## when you run out of lines, this breaks and the except statement is run
        c += 1
        long.write(l)

    except: 
        l = None
        long.close()
        print "Done!, wrote %s lines" %c 

## finally, count how many lines are left. 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()

-4