Dalam python built-in terbuka fungsi, apa perbedaan yang tepat antara mode w
, a
, w+
, a+
, dan r+
?
Secara khusus, dokumentasi menyiratkan bahwa semua ini akan memungkinkan penulisan ke file, dan mengatakan bahwa itu membuka file untuk "menambahkan", "menulis", dan "memperbarui" secara khusus, tetapi tidak mendefinisikan apa arti istilah ini.
Jawaban:
Modus pembukaan yang persis sama dengan yang untuk fungsi perpustakaan standar C
fopen()
.fopen
Manual BSD mendefinisikannya sebagai berikut:sumber
w
danw+
keduanya dapat melakukannyaThe file is created if it does not exist
b
ditambahkan ke modus membuka file dalam modus biner, sehingga ada juga modus sepertirb
,wb
, danr+b
. Python pada Windows membuat perbedaan antara teks dan file biner; karakter end-of-line dalam file teks secara otomatis diubah sedikit ketika data dibaca atau ditulis.+
tidak melakukan sesuatu yang konsisten jika independena
,w
ataur
? Atau apakah saya gagal melihat polanya? Apa polanya?Saya perhatikan bahwa kadang-kadang saya harus membuka kembali Google, hanya untuk membangun citra mental tentang apa perbedaan utama antara kedua mode tersebut. Jadi, saya pikir diagram akan lebih cepat dibaca di lain waktu. Mungkin orang lain juga akan merasa terbantu.
sumber
a
deskripsi yang salah . Tulisan selalu diposisikan di akhir.Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
yang agak lebih kuat daripada hanya mengatakan posisi awal adalah akhir.Info yang sama, hanya dalam bentuk tabel
di mana artinya: (hanya untuk menghindari kesalahan interpretasi)
menulis - menulis ke file diperbolehkan
buat - file dibuat jika belum ada
trunctate - selama pembukaan file itu dibuat kosong (semua konten file dihapus)
posisi saat mulai - setelah file dibuka, posisi awal diatur ke awal file
Catatan:
a
dana+
selalu tambahkan di akhir file - abaikanseek
gerakan apa pun .BTW. perilaku yang menarik setidaknya pada win7 / python2.7 saya, untuk file baru dibuka dalam
a+
mode:write('aa'); seek(0, 0); read(1); write('b')
- detikwrite
diabaikanwrite('aa'); seek(0, 0); read(2); write('b')
- detikwrite
kenaikanIOError
sumber
open(file,'a'); close(); open(file,'r+')
untuk mencapai ini.a
dana+
menulis akan selalu terjadi di akhir file, terlepas dari apakah seseorang secara manual menggerakkan pointer menggunakanseek()
.Opsinya sama dengan fungsi fopen di pustaka standar C:
w
memotong file, menimpa apa pun yang sudah ada di sanaa
menambahkan file, menambahkan apa pun yang sudah ada di sanaw+
terbuka untuk membaca dan menulis, memotong file tetapi juga memungkinkan Anda untuk membaca kembali apa yang telah ditulis ke filea+
terbuka untuk ditambahkan dan dibaca, memungkinkan Anda berdua menambahkan ke file dan juga membaca isinyasumber
Saya pikir ini penting untuk dipertimbangkan untuk eksekusi lintas platform, yaitu sebagai CYA. :)
Hal ini langsung dikutip dari Python Software Foundation 2.7.x .
sumber
Saya menemukan ini mencoba mencari tahu mengapa Anda akan menggunakan mode 'w +' versus 'w'. Pada akhirnya, saya hanya melakukan beberapa pengujian. Saya tidak melihat banyak tujuan untuk mode 'w +', karena dalam kedua kasus, file terpotong untuk memulai. Namun, dengan 'w +', Anda dapat membaca setelah menulis dengan mencari kembali. Jika Anda mencoba membaca dengan 'w', itu akan menimbulkan IOError. Membaca tanpa menggunakan seek dengan mode 'w +' tidak akan menghasilkan apa-apa, karena file pointer akan berada setelah tempat Anda menulis.
sumber