Где должен храниться слой отображения для мыльного API?

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

Когда вы открываете режим «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 +», чтобы читать, искать назад и читать (но все записи все равно будут в конце файла!). Примечание. Использование «a» не совпадает с открытием с «w» и поиском конца файла - подумайте, что может произойти, если другая программа откроет файл и начнет писать между поиском и записью. В некоторых операционных системах открытие файла с помощью «a» гарантирует, что все ваши последующие записи будут добавляться атомарно в конец файла (даже если файл растет другими сообщениями).


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'

Фактически, [man5] manpage указывает:

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

fseek(stream, 0, SEEK_END);

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

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

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

0
задан ImmoralWombat 27 March 2019 в 09:38
поделиться