Pythonでファイルにどのように追加しますか?

2011年01月17日に質問されました。  ·  閲覧回数 1.7M回  ·  ソース

user502039 picture
2011年01月17日

ファイルを上書きするのではなく、どのようにファイルに追加しますか? ファイルに追加する特別な機能はありますか?

回答

Petter picture
2011年01月17日
2589
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
sinelaw picture
2011年01月17日
217

モードとして「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マンページには次のように記載されています。

追加モード(モードの最初の文字として)でファイルを開くと、このストリームへの後続のすべての書き込み操作は、呼び出しの前にあるかのように、ファイルの終わりで発生します。

fseek(stream, 0, SEEK_END);

古い簡略化された回答( withを使用しない):

例:(実際のプログラムでは、 withを使用してファイルを閉じます-ドキュメントを参照してください

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Seth Connell picture
2014年11月10日
49

私はいつもこれをします、

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

シンプルですが、とても便利です。

Cleve Green picture
2017年10月28日
43

Pythonには、主要な3つのモード以外にも多くのバリエーションがあり、これら3つのモードは次のとおりです。

'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
istruble picture
2011年01月17日
36

おそらく、mode引数として"a"を渡したいと思うでしょう。 open()のドキュメントを参照してください。

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

更新(+)、切り捨て(w)、およびバイナリ(b)モードのモード引数には他にも順列がありますが、 "a"から始めるのが最善の策です。

K.Suthagar picture
2016年12月29日
14

この行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")
Alaa M. picture
2020年01月12日
14

print代わりにwrite printそれを行うこともできます:

with open('test.txt', 'a') as f:
    print('appended text', file=f)

test.txtが存在しない

Primusa picture
2019年02月08日
6

ファイルをr+モードで開き、ファイルの位置をファイルの末尾に設定することもできます。

import os

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

r+モードでファイルを開くと、末尾以外の他のファイル位置に書き込むことができますが、 aa+強制的に末尾に書き込みます。

Alec Alameddine picture
2019年05月25日
5

'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に送られます

nima moradi picture
2018年12月20日
4

ファイルに追加したい場合

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

変数myfileを宣言して、 test.txtという名前のファイルを開きました。 Openは、開くファイルと、ファイルに対して実行するアクセス許可または操作の種類を表す文字列の2つの引数を取ります。

これがファイルモードのオプションです

モードの説明

 'r'これはデフォルトのモードです。 読み取り用にファイルを開きます。
 'w'このモード書き込み用にファイルを開きます。 
ファイルが存在しない場合は、新しいファイルが作成されます。
ファイルが存在する場合は、ファイルを切り捨てます。
 'x'新しいファイルを作成します。 ファイルがすでに存在する場合、操作は失敗します。
 'a'ファイルを追加モードで開きます。 
ファイルが存在しない場合は、新しいファイルが作成されます。
 't'これはデフォルトのモードです。 テキストモードで開きます。
 'b'これはバイナリモードで開きます。
 '+'これにより、読み取りおよび書き込み用のファイルが開きます(更新)