Ответ 1
with open("test.txt", "a") as myfile:
myfile.write("appended text")
Как вы добавляете к файлу, а не переписываете его? Есть ли специальная функция, которая добавляется к файлу?
with open("test.txt", "a") as myfile:
myfile.write("appended text")
Вам нужно открыть файл в режиме добавления, установив "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'
Я всегда это делаю,
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
Это просто, но очень полезно.
Вероятно, вы хотите передать "a"
в качестве аргумента mode. См. Документы для open().
with open("foo", "a") as f:
f.write("cool beans...")
Существуют другие перестановки аргумента режима для обновления (+), усечения (w) и двоичного (b) режима, но только с помощью "a"
- ваш лучший выбор.
В 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
когда мы используем эту строку 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")
Вы также можете открыть файл в режиме r+
а затем установить позицию файла в конец файла.
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Открытие файла в режиме r+
позволит вам записывать в другие позиции файла, кроме конца, тогда как a
и a+
заставляют писать в конец.
если вы хотите добавить в файл
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)
Параметр '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+'
предоставляет еще больше свободы. В частности, он позволяет вам создать файл, если он не существует, а также очистить содержимое файла, который существует в настоящее время.
Вы можете разместить свои данные в файле.
with open('results.txt', 'a') as file:
file.write("{} got {}%\n" .format(Name, Marks))
Предположим, что у вас есть файл 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.
Здесь 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()