Langsung saja kita ke contoh kodenya. Berpura-puralah Anda memiliki file bernama contoh. txt di direktori saat ini. Jika tidak, buat saja, lalu isi dengan garis-garis ini dan simpan
hello world and now I say goodbyeBerikut cuplikan singkat kode Python untuk membuka file itu dan mencetak isinya ke layar - perhatikan bahwa kode Python ini harus dijalankan di direktori yang sama dengan file myfile = open("example.txt") for line in myfile: print(line) myfile.close() 1 ada di
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close()Apakah itu tampak terlalu rumit?
myfile = open("example.txt") print(myfile.read()) myfile.close()Inilah cara membaca file itu, baris demi baris, menggunakan for-loop
myfile = open("example.txt") for line in myfile: print(line) myfile.close() _(Catatan. Jika Anda sudah mendapatkan FileNotFoundError - itu hampir bisa diharapkan. Teruslah membaca. )
Masih tampak terlalu rumit? . Tidak hanya itu, kita juga harus menutup file secara manual
Sekarang mari kita lakukan langkah demi langkah ini
Untuk membuka file, kita cukup menggunakan metode myfile = open("example.txt") for line in myfile: print(line) myfile.close() 2 dan meneruskan, sebagai argumen pertama, nama file
myfile = open("example.txt") _Kelihatannya cukup mudah, jadi mari lompat ke beberapa kesalahan umum
Cara mengacaukan saat membuka file
Ini kemungkinan kesalahan paling umum yang akan Anda dapatkan saat mencoba membuka file
FileNotFoundError: [Errno 2] No such file or directory: 'SOME_FILENAME'Nyatanya, saya telah melihat siswa membuang waktu puluhan jam untuk mencoba melewati pesan kesalahan ini, karena mereka tidak berhenti membacanya. Jadi, bacalah. Apa artinya myfile = open("example.txt") for line in myfile: print(line) myfile.close() _3?
Coba letakkan spasi di tempat terjadinya kapitalisasi
File Not Found Error _Anda akan mendapatkan kesalahan ini karena Anda mencoba membuka file yang sebenarnya tidak ada. Kadang-kadang, itu salah ketik sederhana, mencoba myfile = open("example.txt") for line in myfile: print(line) myfile.close() 2 file bernama myfile = open("example.txt") for line in myfile: print(line) myfile.close() 5 tetapi secara tidak sengaja salah mengejanya sebagai myfile = open("example.txt") for line in myfile: print(line) myfile.close() 6
Tapi lebih sering, itu karena Anda tahu ada file di bawah nama file tertentu, seperti myfile = open("example.txt") for line in myfile: print(line) myfile.close() 5 – tapi bagaimana kode Python Anda tahu di mana file itu?
Itu pertanyaan yang cukup rumit. Tetapi langkah pertama untuk tidak membuang waktu Anda adalah jika Anda pernah melihat kesalahan ini, hentikan apa pun yang Anda lakukan. Jangan men-tweak for-loop Anda yang berbelit-belit. Jangan mencoba memasang pustaka Python baru. Jangan nyalakan ulang komputer Anda, lalu jalankan kembali skrip untuk melihat apakah kesalahan secara ajaib memperbaiki dirinya sendiri
Kesalahan myfile = open("example.txt") for line in myfile: print(line) myfile.close() _3 terjadi karena Anda juga tidak tahu di mana file sebenarnya berada di komputer Anda. Atau, bahkan jika Anda melakukannya, Anda tidak tahu bagaimana cara memberi tahu program Python Anda di mana letaknya. Jangan mencoba memperbaiki bagian lain dari kode Anda yang tidak terkait dengan menentukan nama file atau jalur
Cara memperbaiki FileNotFoundError
Inilah perbaikan yang pasti. pastikan file tersebut benar-benar ada
Mari kita mulai dari awal dengan membuat kesalahan. Di shell sistem Anda (mis. e. Terminal), ubah ke folder Desktop Anda
$ cd ~/DesktopSekarang, jalankan ipython
$ ipythonDan sekarang Anda berada di juru bahasa Python interaktif, coba buka nama file yang Anda tahu tidak ada di Desktop Anda, lalu nikmati pesan kesalahannya
>>> myfile = open("whateverdude.txt") myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() _0Sekarang buat file secara manual di Desktop Anda, menggunakan Sublime Text 3 atau apa pun yang Anda inginkan. Tambahkan beberapa teks ke dalamnya, lalu simpan
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() 1Lihat dan buktikan sendiri bahwa file ini benar-benar ada di folder Desktop Anda
Oke, sekarang beralih kembali ke shell Python interaktif Anda (mis. e. ipython), yang Anda buka setelah mengubah ke folder Desktop (mis. e. myfile = open("example.txt") _0). Jalankan kembali perintah myfile = open("example.txt") for line in myfile: print(line) myfile.close() _2 itu, yang menghasilkan FileNotFoundError
>>> myfile = open("whateverdude.txt")Mudah-mudahan, Anda seharusnya tidak mendapatkan kesalahan
Tapi apakah objek yang ditunjuk oleh variabel myfile = open("example.txt") _2 itu?
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() _3Dan apa itu? . e. myfile = open("example.txt") _5
Gunakan pelengkapan otomatis Tab (mis. e. ketik myfile = open("example.txt") _6) untuk mendapatkan daftar metode dan atribut yang ada untuk objek myfile = open("example.txt") 2
Yah, kita bisa melakukan lebih banyak dengan file daripada hanya myfile = open("example.txt") 8 dari mereka. Tapi mari kita fokus membaca saja untuk saat ini
Dengan asumsi variabel myfile = open("example.txt") _2 menunjuk ke beberapa jenis objek file, ini adalah cara Anda membacanya
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() 5Apa yang ada di dalam variabel FileNotFoundError: [Errno 2] No such file or directory: 'SOME_FILENAME' _0 itu?
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() 6Itu hanya sebuah string. Yang artinya tentu saja kita bisa mencetaknya
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() 7Atau menghitung jumlah karakter
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() _8Atau cetak dengan huruf besar semua
myfile = open("example.txt") txt = myfile.read() print(txt) myfile.close() _9Dan itu semua ada untuk membaca dari file yang telah dibuka
Sekarang ke kesalahan
Cara mengacaukan saat membaca dari file
Inilah kesalahan yang sangat, sangat umum
myfile = open("example.txt") print(myfile.read()) myfile.close() 0Keluaran kesalahan
myfile = open("example.txt") print(myfile.read()) myfile.close() 1Perhatikan baik-baik bahwa ini bukan FileNotFoundError. Ini adalah AttributeError – yang memang tidak terlalu jelas – tetapi baca bagian selanjutnya
myfile = open("example.txt") print(myfile.read()) myfile.close() 2Pesan kesalahan langsung ke intinya. objek myfile = open("example.txt") _5 – i. e. string literal, e. g. sesuatu seperti FileNotFoundError: [Errno 2] No such file or directory: 'SOME_FILENAME' _3 tidak memiliki atribut FileNotFoundError: [Errno 2] No such file or directory: 'SOME_FILENAME' 4
Meninjau kembali kode yang salah
myfile = open("example.txt") print(myfile.read()) myfile.close() 0Jika FileNotFoundError: [Errno 2] No such file or directory: 'SOME_FILENAME' _5 menunjuk ke "contoh. txt", maka FileNotFoundError: [Errno 2] No such file or directory: 'SOME_FILENAME' _5 hanyalah objek myfile = open("example.txt") 5
Dengan kata lain, nama file bukanlah objek file. Berikut adalah contoh yang lebih jelas dari kode yang salah
myfile = open("example.txt") print(myfile.read()) myfile.close() _4Dan untuk mengalahkan poin tentang kepala
myfile = open("example.txt") print(myfile.read()) myfile.close() 5Mengapa ini merupakan kesalahan umum? . Antarmuka grafis mengaburkan proses – dan untuk alasan yang bagus. Siapa yang peduli apa yang terjadi selama file saya terbuka saat saya mengklik dua kali
Sayangnya, kita harus berhati-hati saat mencoba membaca file secara terprogram. Membuka file adalah operasi diskrit dari membacanya
- Anda membuka file dengan meneruskan nama filenya – e. g. myfile = open("example.txt") for line in myfile: print(line) myfile.close() _1 – ke dalam fungsi myfile = open("example.txt") for line in myfile: print(line) myfile.close() 2. Fungsi myfile = open("example.txt") for line in myfile: print(line) myfile.close() 2 mengembalikan objek file
- Untuk benar-benar membaca isi file, Anda memanggil metode read() objek file itu
Sekali lagi, ini kodenya, dengan cara yang sedikit lebih bertele-tele
myfile = open("example.txt") print(myfile.read()) myfile.close() 6Objek file juga memiliki metode File Not Found Error _1, yang secara formal dibersihkan setelah file dibuka dan memungkinkan program lain mengaksesnya dengan aman. Sekali lagi, itu adalah detail tingkat rendah yang tidak pernah Anda pikirkan dalam komputasi sehari-hari. Faktanya, ini adalah sesuatu yang mungkin akan Anda lupakan dalam konteks pemrograman, karena tidak menutup file tidak akan merusak apa pun secara otomatis (tidak sampai kita mulai melakukan jenis operasi file yang jauh lebih rumit, setidaknya…). Biasanya, segera setelah skrip selesai, semua file yang tidak ditutup akan ditutup secara otomatis
Namun, saya suka menutup file secara eksplisit – tidak hanya untuk menjaga keamanan – tetapi juga membantu memperkuat konsep objek file tersebut
Salah satu keuntungan dari masuk ke detail pembukaan dan membaca file tingkat rendah adalah bahwa kita sekarang memiliki kemampuan untuk membaca file baris demi baris, daripada satu potongan besar. Sekali lagi, untuk membaca file sebagai satu potongan besar konten, gunakan metode myfile = open("example.txt") 8
myfile = open("example.txt") print(myfile.read()) myfile.close() _7Sepertinya bukan masalah besar sekarang, tapi itu karena myfile = open("example.txt") for line in myfile: print(line) myfile.close() 1 mungkin hanya berisi beberapa baris. Tetapi ketika kita berurusan dengan file yang sangat besar – seperti semua 3. 3 juta catatan setiap orang yang telah menyumbangkan lebih dari $200 ke satu U. S. panitia kampanye presiden pada tahun 2012 atau semua orang yang pernah mengunjungi Gedung Putih – membuka dan membaca file sekaligus terasa lebih lambat. Dan bahkan mungkin crash komputer Anda
Jika Anda bertanya-tanya mengapa perangkat lunak spreadsheet, seperti Excel, memiliki batas baris (kira-kira 1.000.000), itu karena sebagian besar pengguna ingin mengoperasikan file data sekaligus. Namun, banyak file data menarik yang terlalu besar untuk itu. Kami akan membahas skenario tersebut nanti di kuartal ini
Untuk saat ini, seperti inilah biasanya tampilan membaca baris demi baris
myfile = open("example.txt") for line in myfile: print(line) myfile.close() _Karena setiap baris dalam file teks memiliki karakter baris baru (yang direpresentasikan sebagai File Not Found Error 4 tetapi biasanya "tidak terlihat"), menjalankan fungsi print() akan membuat keluaran spasi ganda, karena print() menambahkan baris baru ke apa yang dihasilkannya (i. e. pikirkan kembali program File Not Found Error _5 asli Anda)
Untuk menghilangkan efek itu, panggil metode File Not Found Error _6, yang termasuk dalam objek myfile = open("example.txt") 5 dan hapus karakter spasi putih dari sisi kiri dan kanan string teks
myfile = open("example.txt") print(myfile.read()) myfile.close() _9Dan tentu saja, Anda dapat memperkeras suara dengan fungsi File Not Found Error 8 yang bagus
myfile = open("example.txt") print(myfile.read()) myfile.close() _9Itu saja untuk saat ini. Kami belum membahas cara menulis ke file (yang merupakan operasi yang jauh lebih berbahaya) – saya menyimpannya untuk pelajaran terpisah. Tetapi cukup untuk mengetahui bahwa ketika berurusan dengan file sebagai programmer, kita harus lebih eksplisit dan spesifik dalam langkah-langkahnya.