Как выполнить добавление к файлу в Python?

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

Решение
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Комментарии (16)

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

При открытии в режиме "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 manpage говорится:

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

fseek(stream, 0, SEEK_END);


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

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

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Комментарии (3)

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

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

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

Комментарии (8)

Вероятно, вы хотите передать "a" в качестве аргумента режима. См. документацию по open().

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

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

Комментарии (2)

Python имеет много вариантов от трех основных режимах, эти три режима являются:

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

Так, чтобы добавить в файл он's так же просто, как:

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

То есть режимы, которые просто сделать код меньше строк:

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

Наконец, есть несколько режимов чтения/записи в двоичном формате:

'rb'  read binary
'wb'  write binary
'ab'  append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
Комментарии (0)

когда мы используем эту линию открытой(именем, "А"), чтоа` указывает на добавления файла, это означает, что позволить для вставки дополнительных данных к существующему файлу.

Вы можете просто использовать это следующие строки, чтобы добавить текст в ваш файл

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

FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
Комментарии (0)

Вы также можете открыть файл в режиме R+`, а затем установить позицию файла в конец файла.

import os

with open('text.txt', 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

Открытие файла в режиме Р+ позволит вам писать в другой файл позициях, кроме конца, в то время как A и а+ заставить писать до конца.

Комментарии (0)

если вы хотите добавить в файл

with open("test.txt", "a") as myfile:
    myfile.write("append me")

Мы объявили переменную файл myfile`, чтобы открыть файл test.txt имени``. Откройте принимает 2 аргументов, файл, который мы хотим открыть и строку, которая представляет виды разрешения или действия мы хотим делать на файл<БР>

вот варианты файловом режиме в <предварительно> Описание Режима

'Р' Это режим по умолчанию. Он открывает файл для чтения. 'ш' Этот режим открывает файл для записи. Если файл не существует, создается новый файл. Если файл существует, он усекает файл. 'х' создает новый файл. Если файл уже существует, операция завершается неудачей. 'Это' открыть файл в режиме добавления. Если файл не существует, создается новый файл. 'т' Это режим по умолчанию. Он открывается в текстовом режиме. 'б' Это открывается в двоичном режиме. '+' Это позволит открыть файл для чтения и записи (обновление) </пред>

Комментарии (0)

В &#39;Это&#39; параметр обозначает режим добавления. Если вы Don&#39;т хотите использоватьоткрытойкаждый раз, вы можете легко написать функцию, чтобы сделать это для вас: `` четкости добавить(тхт=&#39;\nFunction успешно выполнена&#39;, файл): с открытого(файла, &#39;Это&#39;) как F: Ф.написать(текстовый) `` Если вы хотите писать куда-то еще, кроме конца, вы можете использовать'Р+' в`<SUP-серфинг>†</суп>: `` импорт ОС

с открытого(файла, 'Р+') как F: Ф.искать(0, ОС.SEEK_END) Ф.писать (и"текст" и) ` Наконец,'ш+'` гранты параметр еще больше свободы. В частности, она позволяет создать файл, если он не'т существуют, а также очистить содержимое файла, который существует в настоящее время.


<суп>†</суп> кредит для этой функции идет до @Primusa

Комментарии (0)

Здесь's мой скрипт, который в основном подсчитывает количество строк, а затем добавляет, затем подсчитывает их снова, так что у вас есть доказательства, что это сработало.

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()
Комментарии (0)