回答:
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の場合も可能です。
モードとして「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'
私はいつもこうしています
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
シンプルですが、とても便利です。
おそらく"a"
モード引数として渡したいでしょう。open()のドキュメントをご覧ください。
with open("foo", "a") as f:
f.write("cool beans...")
更新(+)、切り捨て(w)、およびバイナリ(b)モードのモード引数には、他にも順列がありますが、単に開始するの"a"
が最善の策です。
file
組み込み関数をシャドウします。変数には使用しないでください。
file
はPython 3に組み込まれなくなりました。Python2 でも、ほとんど使用されません。ファイルを開くことは一般的な操作です。file
ここでPython 2と3の両方で名前を使用することは問題ありません。
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
この行を使用すると、ファイルの追加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")
ファイルに追加したい場合
with open("test.txt", "a") as myfile:
myfile.write("append me")
myfile
という名前のファイルを開く変数を宣言しましたtest.txt
。Openは2つの引数を取ります。1つは開くファイルで、もう1つはファイルに対して実行する許可または操作の種類を表す文字列です。
ここにファイルモードオプションがあります
モードの説明 '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+
inは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()