Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Modul String & Masa
Modul Regex
Objektif
Sahkan dan susun fail yang berkaitan dengan pekerja dan peruntukan zon dengan menggunakan ekspresi biasa.
Di pejabat jiran terdapat beberapa dokumentasi yang perlu dikemaskini berkaitan dengan pekerja yang memulakan kerja mereka di ladang baru dan zon untuk diuruskan tanaman dan haiwan ternakan. Menguruskan fail boleh menjadi agak sukar, terutamanya apabila mengendalikan teks rentetan yang panjang. Untuk tujuan ini, kita akan menggunakan modul re, yang merupakan singkatan untuk Regular Expressions yang juga dikenali sebagai Regex. Kita boleh mengakses fungsinya dengan menggunakan import re, untuk tahap ini kita akan menggunakan fungsi-fungsi berikut:
re.findall(): Mengembalikan satu senarai bagi semua kejadian suatu rentetan. Mengambil dua (2) argumen, yang pertama ialah aksara yang dicari dalam satu rentetan, yang kedua ialah rentetan untuk dicari di dalamnya.re.sub(): Menggantikan kejadian yang ditunjukkan dengan rentetan tertentu. Mengambil tiga (3) argumen, yang pertama ialah aksara yang ingin anda gantikan, yang kedua ialah apa yang ingin anda gantikannya dan yang ketiga ialah rentetan yang ingin anda cari.re.search(): Mencari lokasi sesuatu dalam rentetan, mengembalikan sebuah objek. Mengambil dua (2) argumen, aksara yang dicari dan rentetan yang dicari. Anda boleh menggunakan fungsi-fungsi lain dengan objek yang dikembalikan sepertispan()yang mengembalikan vektor kedudukan mula dan tamat item yang dicari dalam teks.re.split(): Memecahkan rentetan kepada senarai pada selang tertentu. Mengambil dua (2) argumen, yang pertama adalah kriteria pembahagian rentetan dan yang kedua ialah rentetan yang ingin dipecahkan.re.match(): Menyemak jika satu rentetan mengandungi nilai tertentu pada permulaan rentetan. Fungsi ini berfungsi seperti versi ringkas fungsire.search()tetapi lebih cekap dan menyemak jika rentetan yang dicari mempunyai pertanyaan itu pada permulaan.
Modul re juga boleh menggunakan urutan khas, terdapat kod-kod yang boleh anda gunakan dengan fungsi re yang membolehkan anda merangkumi pelbagai sifat rentetan. Terdapat senarai panjang urutan khas tetapi untuk tahap ini kita akan menggunakan yang berikut:
\B: Menyemak jika aksara yang ditetapkan berada dalam rentetan tetapi tidak terletak di permulaan atau penghujung suatu perkataan.\D: Mengembalikan aksara yang bukan digit 0-9
Jika terdapat r bersama urutan khas, ia bermaksud bahawa ia menyemak rentetan mentah.
Mulakan dengan berjalan ke tanda X emas dan menghadap ke meja dengan memo, gunakan fungsi read() untuk menyemak memo yang mengandungi manifes semua pekerja. Setiap nama mengandungi # yang memisahkan nombor pekerja mereka, rentetan yang mengandungi nama-nama itu juga disimpan dalam pemalar yang dinamakan manifest.
Buat satu senarai yang dinamakan tags dan simpan nilai re.findall() yang digunakan untuk mencari semua # dalam pemalar manifest, seperti ini: tags = re.findall("#", manifest). Buat satu pembolehubah yang dinamakan number dan gunakan len() dengan senarai tags untuk mengira berapa banyak item yang terdapat dalam senarai, ini akan memberitahu kita berapa ramai pekerja yang terdapat dalam manifes. Gunakan fungsi speak() dengan pembolehubah number untuk mengumumkan berapa banyak nama yang terdapat dalam senarai.
Seterusnya, berjalan ke tanda X cerah berhampiran karpet biru dan menghadap ke meja dan gunakan fungsi read(). Di sini anda akan mendapat senarai pekerja baru dengan jawatan yang ditugaskan kepada mereka. Catat nama-nama dalam setiap profesion supaya anda boleh menyilang semak dengan orang yang sedang ditugaskan. Berjalan ke tanda X di atas karpet biru dan gunakan read() sekali lagi untuk mengesahkan pekerjaan yang sedang ditugaskan.
Tenaga kerja semasa disimpan dalam satu pemalar yang dinamakan assignments, kita mesti mengemaskini dokumen ini dengan maklumat dalam senarai pekerja baru. Gantikan nama-nama yang berbeza dalam senarai dengan menggunakan fungsi re.sub() untuk menggantikan satu bahagian rentetan dengan bahagian yang lain. Contohnya salah satu penyuntingan adalah seperti berikut:
assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)
Nama "Billy Hodgins" digantikan dengan "Carol Hopkins" dalam dokumen. Selain daripada perubahan ini, imbas dokumen dan kemaskini ini dan satu lagi nama dalam senarai untuk mengemaskini dokumen sepenuhnya. Gunakan fungsi write() dengan assignments untuk menyemak hasilnya.
Setelah kita menyelesaikan senarai pekerja, tiba masanya untuk bergerak ke zon untuk ladang. Berjalan ke tanda X gelap di atas karpet merah dan gunakan fungsi read(), ini akan menunjukkan ulasan terperinci mengenai zon. Maklumat ini disimpan dalam satu pemalar yang dinamakan zones.
Yang perlu diberi perhatian khusus ialah penting untuk mengenal pasti lokasi 6210 dalam dokumen kerana zon tersebut perlu dinilai semula. Untuk melakukan ini, kita perlu menggunakan fungsi re.search() untuk mengenal pasti lokasi nombor sektor itu dalam zon. Buat satu pembolehubah yang dinamakan index dan simpan objek carian, tetapkan carian kepada r"6210\B". Apa yang dilakukan adalah, r mencari rentetan mentah, 6210 ialah sektor zon yang kita cari, dan \B ialah kriteria urutan khas untuk carian. Ini dilakukan seperti berikut: index = re.search(r"6210\B", zones).
Setelah index memegang objek carian, tiba masanya untuk mengekstrak data daripadanya menggunakan span(). Buat satu pembolehubah yang dinamakan vector dan simpan lokasi objek carian, seperti ini: vector = index.span(). Setelah disediakan, gunakan pembolehubah vektor tersebut dengan fungsi write() yang telah ditulis sedia.
Seterusnya, kita akan bekerja untuk mengenal pasti item zon. Berjalan ke tanda X gelap di atas karpet hijau. Buat satu senarai yang dinamakan sectors dan gunakan fungsi re.split() untuk menyatukan semua sektor zon yang pelbagai ke dalam satu senarai. Pada fungsi split, gunakan urutan khas "\D" untuk mengambil hanya nombor daripada pembolehubah zones. Gunakan pemahaman senarai untuk membuang mana-mana ruang kosong dalam senarai dengan menggunakan fungsi len() untuk mengeluarkan item yang terlalu kecil untuk menjadi nombor sektor. Seperti ini:
sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]
Gunakan zones dengan fungsi write() untuk mencatatkan semua sektor zon.
Berjalan ke tanda X cerah berhampiran karpet ungu dan menghadap kabinet fail, gunakan fungsi read() untuk mengesahkan sektor keutamaan dalam zon ladang. Catat sektor-sektor tersebut kerana kita perlu mengesahkan jika sektor-sektor ini terdapat dalam senarai zon.
Berjalan ke tanda X gelap di atas karpet ungu, terdapat tiga (3) sektor keutamaan dalam pembolehubah yang dinamakan: sector_a, sector_b, sector_c, telah ditulis sedia pada editor kod, masukkan nilai yang anda baca di tanda X cerah. Pembolehubah-pembolehubah ini menggunakan pemahaman senarai yang melalui semua item dalam senarai sectors dan menapisnya melalui fungsi re.match(). Gunakan pembolehubah sector_a, sector_b, sector_c dan masukkan ke dalam fungsi write() yang telah ditulis sedia untuk melengkapkan tahap ini.