Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Modul String & Waktu
Modul Regex
Tujuan
Verifikasi dan atur file yang berkaitan dengan karyawan dan alokasi zona dengan menggunakan regular expressions.
Di kantor-kantor sebelah terdapat beberapa dokumentasi yang perlu diperbarui mengenai karyawan yang memulai pekerjaan di lahan pertanian baru dan zonasi untuk area di mana tanaman dan ternak akan dipelihara. Mengelola file bisa sangat rumit, terutama ketika menangani teks dalam jumlah besar. Untuk tujuan ini, kita akan menggunakan modul re, yang merupakan singkatan dari Regular Expressions yang juga disingkat sebagai Regex. Kita dapat mengakses fungsinya dengan menggunakan import re, untuk level ini kita akan menggunakan fungsi-fungsi berikut:
re.findall(): Mengembalikan daftar semua kemunculan sebuah string. Menerima dua (2) argumen, argumen pertama adalah karakter apa yang kamu cari dalam sebuah string, argumen kedua adalah string yang akan dicari.re.sub(): Mengganti kemunculan yang ditunjukkan dengan string tertentu. Menerima tiga (3) argumen, argumen pertama adalah karakter apa yang ingin kamu ganti, argumen kedua adalah apa yang ingin kamu ganti, dan argumen ketiga adalah string yang ingin kamu cari.re.search(): Menemukan lokasi sesuatu dalam sebuah string, mengembalikan sebuah objek. Menerima dua (2) argumen, karakter yang kamu cari dan string yang kamu cari. Kamu dapat menggunakan fungsi lain dengan objek yang dikembalikan sepertispan()yang mengembalikan sebuah vektor posisi awal dan akhir item yang dicari dalam teks.re.split(): Memisahkan string ke dalam daftar pada interval yang ditentukan. Menerima dua (2) argumen, argumen pertama adalah dimana memisahkan string dan argumen kedua adalah string yang ingin kamu pisah.re.match(): Memeriksa apakah sebuah string mengandung nilai tertentu di awal string. Ini bekerja seperti versi sederhana dari fungsire.search()tetapi lebih efisien dan memeriksa apakah string yang kamu cari memiliki query di awal.
Modul re juga dapat menggunakan urutan khusus, terdapat kode-kode yang dapat kamu gunakan dengan fungsi re yang memungkinkan kamu meliputi berbagai properti string. Ada daftar panjang urutan khusus tetapi untuk level ini kita akan menggunakan yang berikut:
\B: Memeriksa apakah karakter tertentu ada dalam string tetapi tidak berada di awal atau akhir sebuah kata.\D: Mengembalikan karakter yang bukan digit 0-9
Jika terdapat r di depan sebuah urutan khusus, itu berarti bahwa pemeriksaan dilakukan pada raw string.
Mulailah dengan berjalan menuju tanda X emas dan hadapi meja dengan memo, gunakan fungsi read() untuk memeriksa memo yang berisi manifest semua karyawan. Setiap nama mengandung # yang membatasi nomor karyawan mereka, string yang berisi nama-nama tersebut juga disimpan dalam sebuah konstanta bernama manifest.
Buatlah sebuah daftar bernama tags dan simpan nilai dari re.findall(), yang digunakan untuk mencari semua # dalam konstanta manifest, seperti ini: tags = re.findall("#", manifest). Buatlah sebuah variabel bernama number dan gunakan len() dengan daftar tags untuk menghitung berapa banyak item dalam daftar, hal ini akan memberitahu kita berapa banyak karyawan yang ada di manifest. Gunakan fungsi speak() dengan variabel number untuk mengumumkan berapa banyak nama yang ada dalam daftar.
Selanjutnya, berjalanlah ke tanda X cahaya di samping karpet biru dan hadapi meja, lalu gunakan fungsi read(). Di sini kamu akan menemukan daftar karyawan baru dengan pos yang telah ditetapkan. Catat nama-nama di setiap profesi sehingga kamu bisa mencocokannya dengan orang-orang yang saat ini ditugaskan. Berjalanlah ke tanda X di atas karpet biru dan gunakan read() lagi untuk memverifikasi pekerjaan yang saat ini ditugaskan.
Tenaga kerja saat ini disimpan dalam sebuah konstanta bernama assignments, kita harus memperbarui dokumen ini dengan informasi dari daftar karyawan baru. Gantilah nama-nama yang berbeda dalam daftar dengan menggunakan fungsi re.sub() untuk menggantikan satu bagian dari string dengan bagian lainnya. Sebagai contoh, salah satu editannya adalah sebagai berikut:
assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)
Nama "Billy Hodgins" digantikan dengan "Carol Hopkins" dalam dokumen. Selain perubahan ini, telusuri dokumen dan perbarui nama ini dan satu nama lainnya dalam daftar untuk memperbarui dokumen sepenuhnya. Gunakan fungsi write() dengan assignments untuk memeriksa hasilnya.
Sekarang setelah kita menangani daftar karyawan, saatnya beralih ke zonasi untuk pertanian. Berjalanlah ke tanda X gelap di atas karpet merah dan gunakan fungsi read(), ini akan menampilkan tinjauan detail dari zonasi. Informasi ini disimpan dalam sebuah konstanta bernama zones.
Yang perlu diperhatikan adalah penting untuk mengidentifikasi lokasi 6210 dalam dokumen karena zona tersebut perlu dievaluasi kembali. Untuk melakukan ini, kita perlu menggunakan fungsi re.search() untuk mengidentifikasi lokasi nomor sektor tersebut dalam zonasi. Buatlah sebuah variabel bernama index dan simpan objek hasil pencarian, atur pencarian ke r"6210\B". Apa yang dilakukan adalah, r mencari raw string, 6210 adalah sektor zona yang kita cari, dan \B adalah kriteria urutan khusus untuk pencarian. Ini dilakukan seperti berikut: index = re.search(r"6210\B", zones).
Setelah index memegang objek hasil pencarian, saatnya untuk mengekstrak data darinya menggunakan span(). Buatlah sebuah variabel bernama vector dan simpan lokasi objek hasil pencarian, seperti ini: vector = index.span(). Setelah disiapkan, gunakan variabel vector tersebut dengan fungsi write() yang telah ditulis sebelumnya.
Selanjutnya, kita akan bekerja mengidentifikasi item zonasi, berjalanlah ke tanda X gelap di atas karpet hijau. Buatlah sebuah daftar bernama sectors dan gunakan fungsi re.split() untuk mengkonsolidasikan semua sektor zonasi menjadi sebuah daftar. Pada fungsi split, gunakan urutan khusus "\D" untuk mengambil hanya angka dari variabel zones. Gunakan list comprehension untuk menghapus spasi kosong dalam daftar menggunakan fungsi len() untuk menghapus item yang ukurannya terlalu kecil untuk menjadi nomor sektor. Seperti ini:
sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]
Gunakan zones dengan fungsi write() untuk mencatat semua sektor zonasi.
Berjalanlah ke tanda X cahaya di samping karpet ungu dan hadapi lemari arsip, gunakan fungsi read() untuk memverifikasi sektor prioritas dalam zonasi lahan pertanian. Catat sektor-sektornya karena kita perlu memverifikasi apakah sektor-sektor ini terdapat dalam daftar zonasi.
Berjalanlah ke tanda X gelap di atas karpet ungu, terdapat tiga (3) sektor prioritas dalam variabel bernama: sector_a, sector_b, sector_c, yang telah ditulis sebelumnya di editor kode, masukkan nilai-nilai yang kamu baca di tanda X cahaya. Variabel-variabel ini menggunakan list comprehension yang melalui semua item dalam daftar sectors dan memfilter mereka melalui fungsi re.match(). Gunakan variabel sector_a, sector_b, sector_c dan masukkan ke dalam fungsi write() yang telah ditulis sebelumnya untuk menyelesaikan level.