Yanıtlar:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
with open(file, "a")
yöntemi kullandığını fark ettim . Ben belki eski moda, ama ne üzerinde avantajı varopen(file, "a") ... file.close()
print("appended text", file=myfile)
daha tanıdık bir API için de mümkündür.
open()
sabit kod içermez utf-8
. Kullanır locale.getpreferredencoding(False)
. Geçiş encoding="utf-8"
açıkça eğer biliyorum bu dosya kullandığı utf-8 kodlamasını parametresi.
Mod olarak "a" veya "ab" ayarını yaparak dosyayı ekleme modunda açmanız gerekir. Bkz. Open () .
"A" moduyla açtığınızda, yazma konumu her zaman dosyanın sonunda olur (bir ek). Okumaya izin vermek, geriye doğru aramak ve okumak için "a +" ile açabilirsiniz (ancak tüm yazma işlemleri dosyanın sonunda olacaktır!).
Misal:
>>> 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'
Not : 'a' kullanmak, 'w' ile açmak ve dosyanın sonuna bakmakla aynı şey değildir - başka bir program dosyayı açıp arama ile yazma arasında yazmaya başlıyorsa ne olabileceğini düşünün. Bazı işletim sistemlerinde, dosyayı 'a' ile açmak, aşağıdaki tüm yazılarınızın dosyanın sonuna atomik olarak eklenmesini garanti eder (dosya diğer yazmalarla büyüse bile).
"A" modunun nasıl çalıştığı hakkında birkaç ayrıntı ( yalnızca Linux'ta test edilmiştir ). Geri arasanız bile, her yazma dosyanın sonuna eklenir:
>>> 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'
Aslında, fopen
manpage şöyle diyor:
Bir dosyayı ekleme modunda açmak (modun ilk karakteri olarak a), bu akışa izleyen tüm yazma işlemlerinin dosya çağrısında, çağrının öncesinde olduğu gibi gerçekleşmesine neden olur:
fseek(stream, 0, SEEK_END);
with
):Örnek: ( gerçek bir programda dosyayı kapatmak için kullanınwith
- belgelere bakın )
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
close()
mu?
with
- bkz. Docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement
Bunu hep yaparım,
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
Basit ama çok kullanışlı.
f
Değişkeni diğer işlevlere geçiriyor olsanız bile , bir dosyayı açan aynı işlev onu kapatmalıdır. with
Sözdizimi Bunu gerçekleştirmek için tercih edilen bir yöntemdir.
Muhtemelen "a"
mod argümanı olarak geçmek istersiniz . Open () için dokümanlara bakın .
with open("foo", "a") as f:
f.write("cool beans...")
Güncelleme (+), kesme (w) ve ikili (b) mod için mod bağımsız değişkeninin başka permütasyonları da vardır, ancak sadece "a"
en iyi bahistir.
file
yerleşik bir işlevi gölgeler. Değişkenler için kullanmayın.
file
artık Python 3'te yerleşik değildir . Python 2'de bile çok nadiren kullanılır . Bir dosyayı açmak yaygın bir işlemdir. file
Burada hem Python 2 hem de 3'te isim kullanmakta sorun yoktur. Ne zaman tutarsız olacağını bilin.
Python'un ana üç moddan birçok varyasyonu vardır, bu üç mod şunlardır:
'w' write text
'r' read text
'a' append text
Bir dosyaya eklemek şu kadar kolaydır:
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
Sonra kodunuzu daha az satır yapan modlar var:
'r+' read + write text
'w+' read + write text
'a+' append + read text
Son olarak, ikili biçimde okuma / yazma modları vardır:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
bu satırı kullandığımızda open(filename, "a")
, yani a
dosyanın eklendiğini gösterir, yani mevcut dosyaya fazladan veri eklenmesine izin verilir.
Dosyanıza metin eklemek için aşağıdaki satırları kullanabilirsiniz
def FileSave(filename,content):
with open(filename, "a") as myfile:
myfile.write(content)
FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
Bunu aşağıdakiler print
yerine ile de yapabilirsiniz write
:
with open('test.txt', 'a') as f:
print('appended text', file=f)
Eğer test.txt yok, bu oluşturulacaktır ...
WRITE_TO_FILE = open('my_file.txt', mode='a')
ve daha sonra programınız sırasında çeşitli baskılara sahip olabilirsiniz print('Hello world', file=WRITE_TO_FILE)
ve konsoldaki çıktıyı görmeye her karar verdiğinizde bayrağı değiştirin WRITE_TO_FILE = None
. Değilse sonunda dosyayı kapatmayı unutmayınNone
Dosyayı r+
modda da açabilir ve ardından dosyanın konumunu dosyanın sonuna ayarlayabilirsiniz.
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Dosyayı açma r+
modu size ederken, sonuna yanında diğer dosya konumlarına yazalım olacak a
ve a+
sonuna kadar kuvvet yazma.
bir dosyaya eklemek istiyorsanız
with open("test.txt", "a") as myfile:
myfile.write("append me")
Değişkeni myfile
adlı bir dosyayı açacağını beyan ettik test.txt
. Open 2 argüman alır, açmak istediğimiz dosya ve dosyada yapmak istediğimiz izin veya işlemi gösteren bir dize
işte dosya modu seçenekleri
Mod Açıklaması 'r' Bu varsayılan moddur. Dosyayı okumak için açar. 'w' Bu Mod Dosyayı yazmak için açar. Dosya yoksa, yeni bir dosya oluşturur. Dosya varsa, dosyayı kısaltır. 'x' Yeni bir dosya oluşturur. Dosya zaten varsa, işlem başarısız olur. 'a' Dosyayı ekleme modunda aç. Dosya yoksa, yeni bir dosya oluşturur. 't' Bu varsayılan moddur. Metin modunda açılır. 'b' Bu ikili modda açılır. '+' Bu, okuma ve yazma için bir dosya açar (güncelleme)
'a'
Parametre anlamına hangi modu ekleyin. with open
Her seferinde kullanmak istemiyorsanız , sizin için yapacak bir işlevi kolayca yazabilirsiniz:
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
Sondan başka bir yere yazmak isterseniz 'r+'
† kullanabilirsiniz :
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Son olarak, 'w+'
parametre daha fazla özgürlük sağlar. Özellikle, eğer yoksa, dosyayı oluşturmanıza ve o anda var olan bir dosyanın içeriğini boşaltmanıza izin verir.
Bir dosyanın sonuna daha fazla metin eklemenin en basit yolu kullanmaktır:
with open('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
a+
İçinde open(...)
deyim talimatını modu ekleme dosyayı açın ve okuma ve yazma erişimi verir etmek.
Ayrıca, file.close()
açtıktan sonra açtığınız dosyaları kapatmak için kullanmak her zaman iyi bir uygulamadır .
İşte temelde satır sayısını sayan, daha sonra ekleyen, daha sonra tekrar sayan benim senaryom, böylece işe yaradığına dair kanıtınız var.
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()