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

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

Ответы

Ответ 1

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

Ответ 2

Вам нужно открыть файл в режиме добавления, установив "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 заявляет:

Открытие файла в режиме добавления (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'

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

В 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

Ответ 6

когда мы используем эту строку 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")

Ответ 7

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

import os

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

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

Ответ 8

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

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

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

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

Mode    Description

'r' This is the default mode. It Opens file for reading.
'w' This Mode Opens file for writing. 
If file does not exist, it creates a new file.
If file exists it truncates the file.
'x' Creates a new file. If file already exists, the operation fails.
'a' Open file in append mode. 
If file does not exist, it creates a new file.
't' This is the default mode. It opens in text mode.
'b' This opens in binary mode.
'+' This will open a file for reading and writing (updating)

Ответ 9

Параметр '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

Ответ 10

Вы можете разместить свои данные в файле.

with open('results.txt', 'a') as file:
    file.write("{} got {}%\n" .format(Name, Marks))

Ответ 11

Предположим, что у вас есть файл biki.txt, который содержит:

http://www.youtube.com/watch?v=6INqTUEnitkhttp://www.youtube.com/watch?v=6M6GT5xJhHohttp://www.youtube.com/watch?v=6q1SuHTqY0Ahttp://www.youtube.com/watch?v=6w2kORM6gvQ

Скажем, вы хотите, чтобы это было в формате новой строки и сохранялось в другом файле, например new.txt:

http://www.youtube.com/watch?v=6INqTUEnitk
http://www.youtube.com/watch?v=6M6GT5xJhHo
http://www.youtube.com/watch?v=6q1SuHTqY0A
http://www.youtube.com/watch?v=6w2kORM6gvQ

Вот как это сделать:

#!/usr/bin/env python
import re
import os
import sys
### Coding to arrange matching in new line
with open("biki.txt","r") as myfile:
    mydata = myfile.read()
    data = mydata.replace("http","%http")
    for m in range(1,1000): ## For loop is use here
       dat1 = data.split('%')[m] ## Contain of split file
       f = open("new.txt","a") ## file open in appending mode i.e 'a'
       f.write(dat1) ## writing the contain dat1  to new.txt
       f.close() ## File closing after writing.

Ответ 12

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

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()