Я заметил, что многие люди используют этот with open(file, "a")метод. Я , может быть старомодным, но то , что является преимуществом по сравнениюopen(file, "a") ... file.close()
75
bluewoodtree: Преимущества аналогичны RAII в C ++. Если вы забудете close (), может пройти некоторое время, прежде чем файл будет фактически закрыт. Проще подумать о том, чтобы забыть об этом, когда код имеет несколько точек выхода, исключений и так далее.
Петтер
54
print("appended text", file=myfile)Также возможно, для более знакомого API.
Томас Ахле
206
Вам нужно открыть файл в режиме добавления, установив «a» или «ab» в качестве режима. Смотри open () .
Когда вы открываете в режиме «а», позиция записи всегда будет в конце файла (добавление). Вы можете открыть с «+», чтобы разрешить чтение, поиск назад и чтение (но все записи все равно будут в конце файла!).
Примечание . Использование «a» - это не то же самое, что открытие с «w» и поиск в конце файла - подумайте, что может произойти, если другая программа откроет файл и начнет запись между поиском и записью. В некоторых операционных системах открытие файла с помощью «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'
Открытие файла в режиме добавления (в качестве первого символа режима) приводит к тому, что все последующие операции записи в этот поток происходят в конце файла, как если бы они предшествовали вызову:
fseek(stream,0, SEEK_END);
Старый упрощенный ответ (не используется with):
Пример: ( в реальной программе используйте, withчтобы закрыть файл - см. Документацию )
когда мы используем эту строку open(filename, "a"), это aуказывает на добавление файла, это означает, что позволяет вставлять дополнительные данные в существующий файл.
Вы можете просто использовать следующие строки, чтобы добавить текст в ваш файл
with open("test.txt","a")as myfile:
myfile.write("append me")
Мы объявили переменную, myfileчтобы открыть файл с именем test.txt. Open принимает 2 аргумента: файл, который мы хотим открыть, и строку, представляющую виды разрешений или операций, которые мы хотим выполнить над файлом
здесь есть параметры режима файла
Описание режима
'r' Это режим по умолчанию. Открывает файл для чтения.
'w' Этот режим открывает файл для записи.
Если файл не существует, он создает новый файл.
Если файл существует, он усекает файл.
'x' Создает новый файл. Если файл уже существует, операция не выполняется.
'a' Открыть файл в режиме добавления.
Если файл не существует, он создает новый файл.
't' Это режим по умолчанию. Он открывается в текстовом режиме.
'b' Это открывается в двоичном режиме.
'+' Это откроет файл для чтения и записи (обновление)
В 'a'Значит параметров режима добавления. Если вы не хотите использовать with openкаждый раз, вы можете легко написать функцию, которая сделает это за вас:
Если вы хотите написать в другом месте, кроме конца, вы можете использовать 'r+'† :
import os
with open(file,'r+')as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Наконец, 'w+'параметр предоставляет еще больше свободы. В частности, он позволяет вам создать файл, если он не существует, а также очистить содержимое файла, который существует в настоящее время.
«file.close» автоматически вызывается в конце блока «with», что является преимуществом ключевого слова. Также ОП попросил открыть файл для добавления. Режим «+» не требуется, если вы не хотите читать.
Эрик Ноулз
-6
Вот мой сценарий, который в основном подсчитывает количество строк, затем добавляет, а затем подсчитывает их снова, чтобы у вас было доказательство того, что это сработало.
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):passprint"%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 writewhile 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):passprint"%s has %i lines after appending new lines"%(long_path, i)
long.close()
with open(file, "a")
метод. Я , может быть старомодным, но то , что является преимуществом по сравнениюopen(file, "a") ... file.close()
print("appended text", file=myfile)
Также возможно, для более знакомого API.Вам нужно открыть файл в режиме добавления, установив «a» или «ab» в качестве режима. Смотри open () .
Когда вы открываете в режиме «а», позиция записи всегда будет в конце файла (добавление). Вы можете открыть с «+», чтобы разрешить чтение, поиск назад и чтение (но все записи все равно будут в конце файла!).
Пример:
Примечание . Использование «a» - это не то же самое, что открытие с «w» и поиск в конце файла - подумайте, что может произойти, если другая программа откроет файл и начнет запись между поиском и записью. В некоторых операционных системах открытие файла с помощью «a» гарантирует, что все последующие записи будут добавлены атомарно в конец файла (даже если файл увеличивается за счет других записей).
Еще несколько подробностей о том, как работает режим «а» ( протестировано только в Linux ). Даже если вы ищете ответ, каждая запись будет добавлена в конец файла:
На самом деле,
fopen
страница руководства гласит:Старый упрощенный ответ (не используется
with
):Пример: ( в реальной программе используйте,
with
чтобы закрыть файл - см. Документацию )источник
Я всегда так делаю,
Это просто, но очень полезно.
источник
Вы, вероятно, хотите передать
"a"
в качестве аргумента режима. Смотрите документы для open () .Существуют и другие варианты аргумента mode для обновления (+), усечения (w) и бинарного (b) режима, но
"a"
лучше всего начинать с just .источник
file
Затеняет встроенную функцию. Не используйте это для переменных.file
больше не является встроенным в Python 3. Даже в Python 2 он используется очень редко . Открытие файла является обычной операцией. Можно использоватьfile
имя здесь и на Python 2, и на 3. Знайте, когда нужно быть непоследовательным.В Python есть много вариантов основных трех режимов, эти три режима:
Чтобы добавить в файл это так же просто, как:
Тогда есть режимы, которые просто делают ваш код меньше строк:
Наконец, существуют режимы чтения / записи в двоичном формате:
источник
когда мы используем эту строку
open(filename, "a")
, этоa
указывает на добавление файла, это означает, что позволяет вставлять дополнительные данные в существующий файл.Вы можете просто использовать следующие строки, чтобы добавить текст в ваш файл
источник
Вы также можете сделать это
print
вместоwrite
:Если test.txt не существует, он будет создан ...
источник
Вы также можете открыть файл в
r+
режиме, а затем установить положение файла в конец файла.Открытие файла в
r+
режиме позволит вам записать в другие позиции файла, кроме конца,a
иa+
принудительно записать в конец.источник
если вы хотите добавить в файл
Мы объявили переменную,
myfile
чтобы открыть файл с именемtest.txt
. Open принимает 2 аргумента: файл, который мы хотим открыть, и строку, представляющую виды разрешений или операций, которые мы хотим выполнить над файломздесь есть параметры режима файла
источник
В
'a'
Значит параметров режима добавления. Если вы не хотите использоватьwith open
каждый раз, вы можете легко написать функцию, которая сделает это за вас:Если вы хотите написать в другом месте, кроме конца, вы можете использовать
'r+'
† :Наконец,
'w+'
параметр предоставляет еще больше свободы. В частности, он позволяет вам создать файл, если он не существует, а также очистить содержимое файла, который существует в настоящее время.† Кредит на эту функцию идет на @Primusa
источник
Самый простой способ добавить больше текста в конец файла - использовать:
Оператор
a+
inopen(...)
указывает открыть файл в режиме добавления и разрешить чтение и запись.Также всегда полезно использовать
file.close()
для закрытия любых файлов, которые вы открыли, как только вы закончите с ними.источник
Вот мой сценарий, который в основном подсчитывает количество строк, затем добавляет, а затем подсчитывает их снова, чтобы у вас было доказательство того, что это сработало.
источник