Πώς προσθέτετε στο αρχείο αντί να το αντικαταστήσετε; Υπάρχει κάποια ειδική λειτουργία που προσαρτά στο αρχείο;
with open("test.txt", "a") as myfile:
myfile.write("appended text")
Πρέπει να ανοίξετε το αρχείο σε λειτουργία προσάρτησης, θέτοντας ως λειτουργία το "a" ή το "ab". Βλέπε open().
Όταν ανοίγετε με τη λειτουργία "a", η θέση εγγραφής θα είναι πάντα στο τέλος του αρχείου (ένα append). Μπορείτε να ανοίξετε με τη λειτουργία "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
manpage δηλώνει: fopen
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'
Πιθανόν να θέλετε να περάσετε το "a"
ως όρισμα λειτουργίας. Δείτε τα έγγραφα για την open().
with open("foo", "a") as f:
f.write("cool beans...")
Υπάρχουν και άλλες μετατροπές του επιχειρήματος mode για ενημέρωση (+), αποκοπή (w) και δυαδική (b) λειτουργία, αλλά ξεκινώντας μόνο με "a"
είναι η καλύτερη επιλογή σας.