Відповіді:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
with open(file, "a")
метод. Я, можливо, по-старому, але яка перевага передopen(file, "a") ... file.close()
print("appended text", file=myfile)
також можливо, для більш знайомих api.
open()
не жорсткий код utf-8
. Він використовує locale.getpreferredencoding(False)
. Передайте encoding="utf-8"
параметр явно, якщо знаєте, що у файлі використовується кодування utf-8.
Вам потрібно відкрити файл у режимі додавання, встановивши в якості режиму "а" або "ab". Дивіться відкритий () .
Коли ви відкриваєтесь в режимі "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
сторінка керівництва говорить:
Відкриття файлу в режимі додавання (як перший символ режиму) призводить до того, що всі наступні операції запису в цей потік відбуваються в кінці файлу, як би передуючи виклику:
fseek(stream, 0, SEEK_END);
with
):Приклад: ( у реальній програмі використовувати with
для закриття файлу - див . Документацію )
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
close()
?
with
- див. Docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement
Я завжди це роблю,
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
Це просто, але дуже корисно.
f
змінну іншим функціям, та сама функція, що відкриває файл, повинна закрити її. with
Синтаксис є кращим способом для досягнення цієї мети .
Ви, ймовірно, хочете передавати "a"
як аргумент режиму. Дивіться документи для відкритого () .
with open("foo", "a") as f:
f.write("cool beans...")
Є й інші перестановки аргументу режиму для оновлення (+), обрізання (w) та бінарного (b) режиму, але починати з просто "a"
- найкраще.
file
тіні вбудованої функції. Не використовуйте його для змінних.
file
більше не є вбудованим в Python 3. Навіть у Python 2 він використовується дуже рідко . Відкриття файлу - це звичайна операція. Тут нормально використовувати file
ім’я на Python 2 та 3. Знайте, коли потрібно бути непослідовним.
У 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")
Ви також можете це зробити print
замість write
:
with open('test.txt', 'a') as f:
print('appended text', file=f)
Якщо test.txt не існує, він буде створений ...
WRITE_TO_FILE = open('my_file.txt', mode='a')
, і тоді під час програми у вас може бути кілька відбитків print('Hello world', file=WRITE_TO_FILE)
, і кожен раз, коли ви вирішите побачити вихід на консолі, просто змініть прапор на WRITE_TO_FILE = None
. Не забудьте закрити файл наприкінці, якщо його немаєNone
Ви також можете відкрити файл у 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 аргументи, файл, який ми хочемо відкрити, і рядок, що представляє види дозволу чи операції, які ми хочемо зробити у файлі
ось параметри файлового режиму
Опис режиму 'r' Це режим за замовчуванням. Він відкриває файл для читання. 'w' Цей режим відкриває файл для запису. Якщо файл не існує, він створює новий файл. Якщо файл існує, він обрізає файл. 'x' Створює новий файл. Якщо файл вже існує, операція не працює. 'a' Відкрити файл у режимі додавання. Якщо файл не існує, він створює новий файл. 't' Це режим за замовчуванням. Він відкривається в текстовому режимі. 'b' Це відкривається у двійковому режимі. '+' Це відкриє файл для читання та запису (оновлення)
У '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('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
a+
У open(...)
інструктує заяву , щоб відкрити файл в режимі додавання і дозволяє читання та запис.
Також завжди корисно використовувати file.close()
для закриття будь-яких файлів, які ви відкрили, як тільки ви закінчите їх використання.
Ось мій сценарій, який в основному підраховує кількість рядків, потім додає, а потім підраховує їх знову, щоб у вас були докази, що це спрацювало.
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()