it-roy-ru.com

Как вы добавляете файл в Python?

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

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

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

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

Пример:

>>> 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'

Фактически, fopenmanpage заявляет:

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

fseek(stream, 0, SEEK_END);

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

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

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

Я всегда так делаю,

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

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

36
Seth Connell

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

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

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

33
istruble

В Python есть много вариантов основных трех режимов, эти три режима:

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

Чтобы добавить в файл это так же просто, как:

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
21
Cleve Green

когда мы используем эту строку open(filename, "a"), эта a указывает на добавление файла, это означает, что можно вставить дополнительные данные в существующий файл.

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

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

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

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

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

Мы объявили переменную myfile, чтобы открыть файл с именем test.txt. Open принимает 2 аргумента: файл, который мы хотим открыть, и строку, представляющую виды разрешений или операций, которые мы хотим выполнить над файлом

здесь есть параметры режима файла

 Описание режима 

 'R' Это режим по умолчанию. Открывает файл для чтения .
 'W' Этот режим Открывает файл для записи. 
 Если файл не существует, он создает новый файл .
 Если файл существует, он усекает файл .
 'X' Создает новый файл. Если файл уже существует, операция завершается неудачей .
 'A' Открыть файл в режиме добавления. 
 Если файл не существует, он создает новый файл .
 'T' Это режим по умолчанию. Открывается в текстовом режиме .
 'B' Открывается в двоичном режиме .
 '+' Откроется файл для чтения и записи (обновления) 
1
nima_moradi

Параметр 'a' обозначает режим добавления. Если вы не хотите каждый раз использовать with open, вы можете легко написать функцию, которая сделает это за вас:

def append(txt='\nFunction Successfully Executed', file):
    with open(file, 'a') as f:
        f.write(txt)

Если вы хотите написать в другом месте, кроме конца, вы можете использовать 'r+':

import os

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

Наконец, параметр 'w+' предоставляет еще больше свободы. В частности, он позволяет вам создать файл, если он не существует, а также очистить содержимое файла, который существует в настоящее время.


Кредит на эту функцию идет на @Primusa

1
Alec Alameddine

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

import os

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

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

0
Primusa