Dari dok ,
Mode 'r +', 'w +' dan 'a +' membuka file untuk memperbarui (perhatikan bahwa 'w +' memotong file). Tambahkan 'b' ke mode untuk membuka file dalam mode biner, pada sistem yang membedakan antara file biner dan teks; pada sistem yang tidak memiliki perbedaan ini, menambahkan 'b' tidak berpengaruh.
dan disini
w +: Membuka file untuk menulis dan membaca. Timpa file yang ada jika file tersebut ada. Jika file tidak ada, buat file baru untuk membaca dan menulis.
Tapi, bagaimana cara membaca file dengan terbuka w+
?
Jawaban:
Katakanlah Anda membuka file dengan
with
pernyataan seperti seharusnya. Maka Anda akan melakukan sesuatu seperti ini untuk membaca dari file Anda:Perhatikan
f.seek(0)
- jika Anda lupa ini,f.read()
panggilan akan mencoba membaca dari akhir file, dan akan mengembalikan string kosong.sumber
w+
akan "menimpa file yang ada jika file ada". Jadi segera setelah Anda membuka filew+
, itu sekarang file kosong: itu berisi 0 byte. Jika dulu berisi data, data tersebut telah terpotong - potong dan buang - dan sekarang ukuran file adalah 0 byte, jadi Anda tidak dapat membaca data apa pun yang ada sebelum membuka filew+
. Jika Anda benar-benar ingin membaca data sebelumnya dan menambahkan untuk itu, Anda harus menggunakanr+
bukanw+
.Berikut adalah daftar berbagai mode membuka file:
r
rb
r +
rb +
w
wb
w +
wb +
Sebuah
ab
a +
ab +
sumber
w+
membuat file baru atau memotong file yang sudah ada, kemudian membukanya untuk membaca dan menulis;r+
membuka file yang ada tanpa memotongnya untuk membaca dan menulis. Sangat berbeda.r
,,w
ataua
eksklusif, tetapib
dapat ditambahkan ke salah satu dari itu, seperti dapat+
, atauU
... Ini adalah ledakan kombinasi.rb
bukan mode default, kutipan:The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r'
docs.python.org/2/library/functions.html#openSemua mode file dalam Python
r
untuk dibacar+
terbuka untuk membaca dan menulis (tidak dapat memotong file)w
untuk menulisw+
untuk menulis dan membaca (dapat memotong file)rb
untuk membaca file biner. Penunjuk file ditempatkan di awal file.rb+
membaca atau menulis file binerwb+
menulis file binera+
terbuka untuk menambahkanab+
Membuka file untuk menambahkan dan membaca dalam biner. Penunjuk file ada di akhir file jika file ada. File terbuka dalam mode tambahkan.x
terbuka untuk pembuatan eksklusif, gagal jika file sudah ada (Python 3)sumber
rb
danwb
, belum lagiU
mode dalam 2.x dant
mode dalam 3.x (yang keduanya dapat dikombinasikan dengan semuanya kecualib
).wb+
juga membaca dari file?r
untuk dibacaw
untuk menulisr+
untuk membaca / menulis tanpa menghapus konten asli jika file ada, jika tidak, tambahkan pengecualianw+
untuk menghapus konten asli lalu baca / tulis jika file ada, jika tidak buat fileSebagai contoh,
sumber
File terpotong, sehingga Anda dapat memanggil
read()
(tidak ada pengecualian yang dinaikkan, tidak seperti ketika dibuka menggunakan 'w') tetapi Anda akan mendapatkan string kosong.sumber
Saya menduga ada dua cara untuk menangani apa yang saya pikir Anda coba capai.
1) yang jelas, buka file untuk dibaca saja, baca ke dalam memori kemudian buka file dengan t, lalu tulis perubahan Anda.
2) gunakan rutinitas penanganan file tingkat rendah:
Semoga ini membantu..
sumber
r+
Sebenarnya, ada yang salah tentang semua jawaban lain tentang
r+
mode.test.in
konten file :Dan skrip py:
Jalankan dan
test.in
kontennya akan diubah menjadi:Namun, saat kami memodifikasi skrip ke:
mereka
test.in
juga merespons:Jadi,
r+
mode akan memungkinkan kita untuk menutupi konten dari awal jika kita tidak melakukan operasi baca. Dan jika kita melakukan beberapa operasi baca,f.write()
hanya akan menambahkan file.Ngomong-ngomong, jika kita
f.seek(0,0)
sebelumnyaf.write(write_content)
, content_content akan menutupinya dari posisi (0,0).sumber
Seperti disebutkan oleh h4z3 , Untuk penggunaan praktis, Terkadang data Anda terlalu besar untuk memuat semuanya secara langsung, atau Anda memiliki generator, atau data masuk waktu nyata, Anda dapat menggunakan w + untuk menyimpan dalam file dan membaca nanti.
sumber