Cara Melaksanakan Operasi Input/Output Python pada Fail dengan Fungsi Terbuka Python

Cara Melaksanakan Operasi Input/Output Python pada Fail dengan Fungsi Terbuka Python

Manipulasi fail adalah operasi yang lambat laun kita perlu melaksanakan dalam program kami. Python terbina dalam buka fungsi mengembalikan a objek fail, yang membolehkan kita berinteraksi dengan fail dalam mod yang berbeza: kita akan melihatnya dalam artikel ini.

Dalam tutorial Python ini, anda akan belajar:

  • Cara menggunakan fungsi terbuka python.
  • Apakah pelbagai mod operasi yang boleh digunakan dengan fungsi terbuka Python.
  • Cara berinteraksi dengan objek fail.
  • Mengapa penting untuk menutup objek fail, dan bagaimana melakukannya.

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem OS-bebas
Perisian python3
Yang lain Tidak ada kebenaran khas yang diperlukan.
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak
>>> - Perintah Python akan dilaksanakan dalam cangkang interaktif

Penyataan input dan output python

Terdapat banyak sebab program perlu berinteraksi dengan fail: membaca konfigurasi dan tetapan yang akan mempengaruhi tingkah laku program itu sendiri, atau mungkin data yang berterusan. Dalam tutorial ini, kita akan melihat bagaimana untuk menyelesaikan tugas -tugas tersebut, menggunakan fungsi terbuka Python dan berinteraksi dengan objek fail.



Fungsi terbuka python

Sebelum mula membaca atau menulis fail, kita perlu belajar bagaimana kita dapat mengaksesnya. Fungsi terbuka Python membuka fail dan mengembalikan a objek fail, Meningkatkan Oserror pengecualian jika sumber tidak dapat diakses. Fungsi ini hanya mempunyai satu hujah wajib, fail, yang merupakan rentetan atau objek byte yang mewakili laluan fail yang akan dibuka:

>>> fobject = buka ('linuxconfig.txt ') 
Salinan

Mod Baca - 'R'

Kami membuka Linuxconfig.txt fail, dan objek fail yang dihasilkan kini dirujuk oleh fobject. Ia adalah python objek fail yang melaksanakan kaedah seperti tulis dan Baca. Bagaimana jika Linuxconfig.txt Fail tidak wujud? A FileNotFoundError Pengecualian akan dibangkitkan:

>>> fobject = buka ('linuxconfig.txt ') Traceback (panggilan terakhir terakhir): fail "", baris 1, dalam  FilenotfoundError: [errno 2] Tiada fail atau direktori sedemikian: 'linuxconfig.txt ' 
Salinan

Seperti yang kita katakan di atas, satu -satunya hujah wajib mengenai fungsi terbuka Python adalah fail. Apabila digunakan seperti dalam contoh di atas, fungsi beroperasi mod teks dan fail dibuka hanya untuk membaca. Bersamaan dengan apa yang kita lakukan di atas adalah:

>>> fobject = buka ('linuxconfig.txt ',' rt ') 
Salinan

Hujah kedua fungsi adalah mod. Dalam kes ini, 'rt', Dimanakah 'r' bermaksud Baca dan juga 'T' Menentukan bahawa kami beroperasi dalam mod teks. Ia juga mungkin untuk membuka fail dalam mod binari, menggantikannya 'T' dengan 'b': dalam hal ini kandungan bait, tanpa pengekodan akan dikembalikan. Sejak 'T' adalah mod lalai, mulai sekarang, kita akan menghilangkannya. Untuk membaca kandungan fail yang boleh kita gunakan, sebagai contoh, Baca kaedah. Ia akan mengembalikan semua kandungan fail sebagai rentetan:

>>> fobject.baca () 'linuxconfig sangat mengagumkan!\ n ' 
Salinan

Bilakah beroperasi dalam mod baca, sebarang percubaan menulis ke fail akan menaikkan io.Tidak disokong Pengecualian:

>>> fobject.tulis ('linuxconfig sangat mengagumkan!') Traceback (panggilan terakhir terakhir): fail "", baris 1, dalam  io.Tidak disokong: tidak boleh ditulis 
Salinan

Jelas, ini bukan satu -satunya mod yang tersedia. Mari kita lihat yang lain.

Mod Tulis - 'W'

Semasa menentukan 'W' sebagai nilai mod hujah buka fungsi, jika fail itu wujud, ia adalah yang pertama dipotong (keseluruhan kandungannya dibuang) dan kemudian dibuka untuk menulis; Sekiranya fail tidak wujud, ia dibuat. Dalam kes ini kita menggunakan tulis kaedah objek fail:

>>> fobject = buka ('linuxconfig.txt ',' w ') >>> fobject.tulis ('kami hanya menulis ke fail!') 26 >>> fobject.Tutup () 
Salinan

Kami membuka fail untuk menulis, daripada kami menggunakan tulis kaedah objek fail, yang menulis rentetan dan mengembalikan bilangan aksara yang ditulis, 26 dalam kes ini, akhirnya kami menggunakan Tutup Kaedah Untuk Menutup Objek: Langkah ini sangat penting, kerana operasi menulis menjadi berkesan hanya sekali kandungan fail yang dibuang (kita akan melihat kepentingan menutup objek fail pada akhir tutorial). Jika kita kini mengkaji kandungan fail, kita melihat bahawa kandungannya sebelumnya telah ditimpa, dan ia hanya mengandungi rentetan:

"Kami hanya menulis ke fail!'

Seperti yang berlaku di atas, jika kita cuba melakukan operasi yang tidak dibenarkan oleh mod operasi, pengecualian dibangkitkan. Dalam kes ini, jika kita cuba membaca kandungan fail, kami memperoleh hasil berikut:

>>> fobject = buka ('linuxconfig.txt ',' w ') >>> fobject.Baca () Traceback (panggilan terakhir yang terakhir): Fail "", baris 1, dalam io.Tidak disokong: tidak boleh dibaca 
Salinan

Menambah ke fail: Mod 'A'

Bagaimana jika kita mahu menambah fail, menyimpan kandungannya sekarang? Kita mesti menggunakan 'a' (tambah) mod. Apabila mod ini digunakan, jika ada fail, ia dibuka untuk menulis dan alirannya diposisikan di hujungnya. Dengan cara ini kandungan fail sebelumnya, akan dipelihara. Jika fail tidak wujud, ia dibuat:

>>> fobject = buka ('linuxconfig.txt ',' a ') >>> fobject.tulis ('Teks yang dilampirkan!') 14 >>> fobject.Tutup () 
Salinan

Kami membuka fail di 'a' mod, dan tulis rentetan 'Teks yang dilampirkan' ke fail. Kandungan sebelumnya belum dipotong:

Linuxconfig hebat! Teks yang dilampirkan! 

Mod 'X' - Penciptaan Eksklusif

Mod pembukaan ini hanya tersedia di python3. Apabila ia digunakan, a FileExistsError ia dibangkitkan jika fail sudah ada. Jika fail tidak wujud, ia dibuat dan dibuka untuk menulis:

fileObject = buka ('linuxconfig.TXT ',' X ') Traceback (panggilan terakhir terakhir): fail "", baris 1, dalam  FileExistsError: [errno 17] Fail wujud: 'Linuxconfig.txt ' 
Salinan

Setiap kali kita menulis sesuatu, ia dilampirkan kepada kandungan sebelumnya, sehingga kita menutup objek fail:

>>> fileObject = buka ('linuxconfig1.txt ',' x ') >>> FileObject.tulis ('linuxconfig adalah hebat lagi \ n') >>> fileObject.tulis ('saya ulangi: linuxconfig hebat!\ n ') >>> FileObject.Tutup () 
Salinan

Setelah menjalankan kod di atas, kandungan fail baru akan:

Linuxconfig hebat! Saya ulangi: linuxconfig sangat mengagumkan! 

Watak '+'

Kami melihat mod asas yang boleh digunakan dengan buka berfungsi dan bagaimana mereka berfungsi. Dengan memasuki '+' watak kepada masing -masing, kita boleh mendapatkan tingkah laku baru.

Mod 'r+'

Apabila memasuki watak '+' ke mod 'R' ('R+'), fail dibuka untuk membaca dan menulis; pengecualian dibangkitkan jika fail tidak wujud. Aliran itu diposisikan pada permulaan fail, jadi jika sesuatu ditulis, ia akan mengatasi kandungan sebelumnya. Sekiranya kita berada dalam mod ini, tetapi kita masih mahu kandungan baru dilampirkan, menempah yang ada, kita mesti mengubah kedudukan semasa menggunakan mencari Kaedah objek fail sebelum menulis, dengan cara berikut:

>>> fileObject = buka ('linuxconfig.txt ',' r+'): >>> FileObject.Cari (0,2) >>> FileObject.tulis ('teks ini akan dilampirkan') >>> FileObject.Tutup () 
Salinan

The mencari kaedah mengambil dua hujah: yang pertama adalah mengimbangi, yang kedua adalah kedudukan dari mana pengimbang harus dikira, di mana 0 (lalai jika hujah ini ditinggalkan) adalah permulaan fail, 1 adalah offset semasa, dan 2 adalah akhir fail. Dalam kes ini, kami menggunakan offset 0 dari akhir fail, oleh itu bergerak ke hujung fail itu sendiri. Perhatikan bahawa menentukan pengimbang bukan sifar dalam kes ini akan menimbulkan io.Tidak disokong pengecualian, kerana mustahil untuk melakukan pencarian yang tidak sifar,.

Mod 'w+'

Mod ini berfungsi dengan cara ini: fail akan dibuka baik untuk membaca dan menulis. Sekiranya fail ada kandungannya akan dipotong, jika tidak, fail akan dibuat. Sama seperti contoh sebelumnya, mungkin untuk membaca dan menulis fail, namun terdapat dua perbezaan besar: yang pertama adalah bahawa kandungan fail akan dipotong sebaik sahaja ia dibuka (dan bukan jika anda aktif menulis sesuatu ke ia), yang kedua adalah bahawa fail akan dibuat jika tidak ada.



Mod 'a+'

Semasa menentukan mod ini dengan fungsi terbuka Python, kami memperoleh tingkah laku berikut: Sama seperti dalam contoh sebelumnya fail dibuka untuk membaca dan menulis, bagaimanapun, aliran itu diposisikan pada akhir dari fail, jadi apa -apa kandungan baru ia dilampirkan kepada yang ada.

Dua perkara harus diperhatikan: kerana aliran diposisikan pada akhir fail, jika kita cuba menggunakan Baca kaedah pada objek fail untuk mendapatkan kandungan semasa, ia akan mengembalikan rentetan kosong. Untuk dapat membaca kandungannya, kita harus terlebih dahulu bergerak ke permulaan fail, menggunakan kaedah Seek dengan cara berikut:

FileObject.Cari (0)
Salinan

Perkara kedua, yang sangat penting untuk diperhatikan, ialah apabila menggunakan mod ini, walaupun kita bergerak ke permulaan fail seperti yang kita lakukan dalam contoh di atas, dan tulis, kandungan yang ada itu tidak hilang: kandungan baru Selalu dilampirkan.

Menutup objek fail

Setelah selesai bekerja dengan objek fail kami, kami harus selalu ingat untuk menutupnya, atas beberapa sebab. Di Primis kerana beberapa operasi, seperti menulis, menjadi berkesan hanya apabila objek fail ditutup dan kandungannya memerah, kedua untuk membebaskan sumber sistem dan untuk kejelasan kod. Terdapat dua cara kita dapat menutup objek fail: yang pertama adalah dengan memanggil Tutup kaedah pada objek fail, seperti yang kita lihat di atas. Yang kedua, adalah dengan menggunakan dengan Penyata:

dengan terbuka ('linuxconfig.txt ',' r ') sebagai fileObject: content = fileObject.Baca () # melaksanakan operasi yang diperlukan 
Salinan

Apa yang berlaku dalam kes ini? Menggunakan pernyataan ini, ungkapan di sebelah dengan, Dalam kes ini buka ('linuxconfig.txt ',' r '), dinilai ke objek fail, yang menyokong protokol pengurus konteks, kerana ia melaksanakannya __Enter__ dan __exit__ kaedah. Objek fail kemudiannya alias ke FileObject. Selepas kod yang terkandung di dalam blok dilaksanakan, __exit__ kaedah objek fail dipanggil secara automatik, dan objek fail ditutup. Menggunakan pengurus konteks sangat berguna, kerana objek akan selalu ditutup sebaik sahaja kita selesai mengendalikannya: satu perkara yang kurang ingat.

Kesimpulan

Dalam tutorial ini, kami belajar bagaimana menggunakan Python terbina dalam buka berfungsi untuk membuat objek fail, digunakan untuk berinteraksi dengan fail. Kami melihat pelbagai mod yang boleh diserahkan kepada fungsi dan bagaimana mereka mengubah tingkah laku objek fail. Akhirnya, kita melihat mengapa penting untuk sentiasa menutup objek fail setelah kita selesai bekerja dengannya, bagaimana kita dapat melakukannya dengan menggunakan Tutup kaedah, dan bagaimana ia dapat dilakukan secara automatik, jika kita menggunakan dengan pernyataan, dan pengurus konteks. Seperti yang selalu dicadangkan, anda boleh berunding dengan dokumentasi rasmi untuk meningkatkan pengetahuan anda.

Lihat juga tutorial Python kami yang lebih luas untuk lebih banyak konsep berkaitan Python atau fail membaca dan menulis kami dengan Panduan Python.

Tutorial Linux Berkaitan:

  • Mengendalikan input pengguna dalam skrip bash
  • Menguasai Gelung Skrip Bash
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1
  • Manipulasi data besar untuk keseronokan dan keuntungan bahagian 3
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2
  • Cara Gunung ISO di Linux