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


1574

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

回答:


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

10
チュートリアルのこれも役に立つかもしれません。
Dan

28
多くの人がこのwith open(file, "a")方法を使っていることに気づきました。私は多分昔ながらのですが、利点を超えるものですopen(file, "a") ... file.close()

75
bluewoodtree:利点はC ++のRAIIの利点と同様です。close()を忘れると、ファイルが実際に閉じられるまでに時間がかかる場合があります。コードに複数の出口点や例外などがある場合は、忘れがちです。
ペッター2013年

54
print("appended text", file=myfile)より身近なAPIの場合も可能です。
トーマスアーレ2014年

206

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

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

fseek(stream, 0, SEEK_END);

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

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

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

49

私はいつもこうしています

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

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


12
書き方が少し安全で少し安全です:open( 'filename'、 'a')をfとして:f.write( 'stuff')
Sam Redway

35

おそらく"a"モード引数として渡したいでしょう。open()のドキュメントをご覧ください。

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

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


20
file組み込み関数をシャドウします。変数には使用しないでください。
Mark Tolonen、2011年

11
@MarkTolonen:fileはPython 3に組み込まれなくなりました。Python2 でも、ほとんど使用されません。ファイルを開くことは一般的な操作です。fileここでPython 2と3の両方で名前を使用することは問題ありません。
jfs 14

34

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

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

9

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

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

場合のtest.txtが存在しない、それが作成されます...


6

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

import os

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

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


4

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

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

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

ここにファイルモードオプションがあります

モードの説明

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

4

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


2

ファイルの末尾にテキストを追加する最も簡単な方法は、次のようにすることです。

with open('/path/to/file', 'a+') as file:
    file.write("Additions to file")
file.close()

ステートメントのa+inはopen(...)、ファイルを追加モードで開くように指示し、読み取りおよび書き込みアクセスを許可します。

またfile.close()、ファイルを使い終わったら、を使用して開いたファイルを閉じることを常にお勧めします。


1
「file.close」は「with」ブロックの最後で自動的に呼び出されます。これはキーワードの利点です。また、OPは追加するファイルを開くことについて質問しました。「+」モードは、読みたくない限り必要ありません。
Erik Knowles

-6

これが私のスクリプトです。基本的には行数を数え、次に追加してからもう一度数えますので、それが機能したことを証明できます。

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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.