bermain excel dengan pyton31

43
Bermain Excel dengan Python3.1 Oleh ras,

Upload: rarastalas

Post on 25-Jul-2015

173 views

Category:

Documents


2 download

DESCRIPTION

Belajar Pyton

TRANSCRIPT

Page 1: Bermain Excel Dengan Pyton31

Bermain Excel dengan Python3.1 Oleh ras,

Page 2: Bermain Excel Dengan Pyton31

Bermain Excel dengan Python Ras, Copyright © 2010 Abstraksi

Buku ini ditujukan untuk siapa saja yang tertarik menggunakan python, tetapi dibatasi pada penggunaannya di windows. Saat penulisan buku ini versi python terbaru yang dinyatakan sudah stabil adalah v3.1, versi 3.2 masih dalam tahap pengembangan , sedangkan pemograman yang akan dipakai pada buku ini masih menggunakan v3.1.

Sebenarnya kita pun masih dapat menggunakan versi lama, sebagaimana fakta yang saya alami, karena faktor teknis lainnya, membuat ditempat saya bekerja tidak memungkinkan menggunakan versi baru, dengan demikian walau versi lama pun tetap akan berguna. Kadang kala kita tidak harus selalu menggunakan versi terbaru suatu software untuk menghasilkan sebuah produk yang berguna dan handal.

Pada buku terdapat penjelasan dari awal, dalam hal ini benar-benar dimulai dari nol pengenalan python dan penggunaannya. Pembahasan tidak tertuju pada pemahaman python secara menyeluruh, hanya penggunaan fungsi dan module yang dipakai untuk menyelesaikan contoh kasus. Disini saya tidak ingin menterjemahkan manual tutorial python. Anda akan menemukan fungsi pengulangan, pembacaan dan penulisan file, module regular expression,serta bagaimana mengakses excel menggunakan API. Setidaknya hal-hal tersebut merupakan fungsi dan module yang akan kita pakai dalam penjelasan buku ini.

Page 3: Bermain Excel Dengan Pyton31

Prakata. Sebelum memulai, beberapa hal teknis yang harus ditekan yaitu python yang digunakan adalah python untuk windows versi 3.1 dan Os windows XP Professional SP2. Pada dasarnya buku ini ditulis sebagai dokumentasi atas pengalaman membuat program yang saya rasa akan memiliki kegunaan bagi orang lain, semoga melalui buku ini dapat mempermudah siapa saja yang memiliki permasalahan serupa dengan yang pernah saya alami. Oleh Karena itu metoda penulisan buku ini akan mengarah pada pemecahan suatu masalah, sehingga pada Bab pertama akan berisi permasalahan yang dihadapi yang kemudian secara bertahap membuat pemecahan dari hal yang sederhana sampai tingkat yang lebih rumit. Melalui metoda ini pula saya harap algoritma pemograman yang baik dapat diimplementasikan untuk mengatasi persoalan yang lain tanpa terikat bahasa pemograman. Semoga dapat menjadi dasar untuk mengenal bahasa pemograman yang lain. Saya juga ingin memohon maaf, jika buku ini tidak mencerminkan penulisan dan pengeditan yang baik dan benar, baik dari segi EYD dan isinya. Mengingat saya membuatnya disela-sela kesibukan saya yang tidak terkait dengan ini.

Page 4: Bermain Excel Dengan Pyton31

Hak Cipta, Buku ini merupakan hak cipta atas nama ras sebagai penulis, siapa saja tidak dilarang untuk meperbanyak dan menyebarluaskan selama sesuai dengan ijin copyright yang saya berikan. Hal terutama adalah tidak diperkenankan mengambil keuntungan baik secara langsung maupun tidak langsung yang bersifat ekonomis dengan menjual materi isi buku ini kepada siapa pun, termasuk dalam bentuk cetak.

Page 5: Bermain Excel Dengan Pyton31

Daftar Isi.

1. Abstraksi 2. Prakata 3. Hak Cipta 4. Daftar Isi 5. Bab 1 Pendahuluan. 6. Bab 2 Memulai

• Instal Python

• Tool yang dipakai

• Referensi, Manual

• Helo word 7. Bab 3 Langkah selanjutnya

• Baca file

• Latihan Regex

• Regex tanpa double

• Menangkap lebih dari satu pattern ditoken dan catat pemunculannya 8. Bab 4 Lebih dalam

• Baca Excel, tools pendukung yang diperlukan

• Baca txt file bandingkan dengan list exel lalu beri tanda

• Penambahan log untuk data yang tidak ditemukan pada list 9. Bab 5 Tingkat Lanjut

• Penerapan pada masalah yang sebenarnya, dengan list txt yang banyak

• Penggunaan Find sebagai solusi tuning 10. Bab 6 Penyelesaian

• Pencarian dari dua sheet(Tm dan Tc) 11. Bab 7 Penutup

• Masih banyak kekurangan, belum sempurna, tidak menggunakan OOP. 12. Daftar Pustaka 13. Riwayat

Page 6: Bermain Excel Dengan Pyton31

Bab 1.

Pendahuluan

Alkisah ketika saya masih kuliah, saya diwajibkan melakukan kegiatan magang disebuah perusahan, tentunya ini cukup menggembirakan buat bekal saya nanti mencari kerja. Ya jaman sekarang ini susah sekali mencari kerja, walaupun berbekal ijazah sarjana tidak menjadi nilai tambah, apalagi saya tidak memiliki saudara yang dapat menjadi cantolan. Oke kembali ke topik, beruntung sebuah perusahaan manufaktur persenjataan menerima saya untuk magang. Sebagai seorang mahasiswa IT saya mendapat tugas yang bisa dibilang tidak berhubungan, maklumlah ini perusahaan sangat menjaga kerahasiaan. Sehingga saya ditugaskan untuk melakukan crosscheck kode sandi yang digunakan pada sebuah kendaraan perang super canggih. Dengan diberikan perangkat pendukung sebuah computer menggunakan system operasi window, dan koneksi Internet, tidak ada akses ke dalam system jaringan internal perusahaan tersebut. Sebagaimana layaknya sebuah manufaktur maka kendaraan perang tersebut harus melalui proses test yang banyak untuk sampai tahap siap pakai, nah tugas saya untuk memastikan semua test yang dilakukan telah memakai kode sandi yang ada, dalam hal ini terdapat 2000 lebih code sandi yang menjadi referensi. Kode sandi itu pun dibedakan menjadi kode sandi kirim dan terima. Tugas saya bisa dibilang sederhana tetapi melelahkan, yaitu membaca semua dokumen test yang telah dilakukan dalam hal ini terdapat lebih dari 100 dokumen dan memastikan kode sandi itu terdapat dalam list. Sebagai bekal saya diberikan list kode sandi yang berupa file excel dan didalamnya berisi dua worksheet, yaitu satu worksheet kode sandi kirim dan kode sandi terima. Untuk kode sandi kirim terdiri dari 1000 kode sedangkan kode sandi terima terdiri dari 2000 lebih. Lalu saya diberikan seluruh dokumen test yang berjumlah lebih dari 100 dokumen dalam bentuk file txt dan setiap dokumennya berisi lebih dari 100 halaman. Hal

yang harus saya lakukan adalah memberi tanda “x” pada satu kolom

“crosscheck”(kolom sebelum kolom kode sandi) pada file excel list kode sandi jika

pada dokumen test ditemukan kode sandinya baik untuk kirim atau pun terima. Lalu

membuat catatan berapa banyaknya kode sandi yang sama ditemukan dalam satu

dokumen dan juga mencatat kode sandi yang ditemukan di dokumen tetapi tidak

terdapat di list kode sandi excel.

Berikut cuplikan file excel list kode sandi:

CrossCheck Kode Terima (TM) CrossCheck Kode Kirim (TC)

KG1000DE CM01TLC

KG1001DE CM02TLC

KG1004FS CM06TLC

KG1005DE CM08TLC

KG1020GJ CM09TLC

KG1020DE CM10RTS

Table 1.

Sebagai gambaran disetiap dokumen terdiri dari banyak sekali kode sandi dan terdapat pengulangan kode sandi yang sama dalam dokumen test tersebut. Tentunya bisa

Page 7: Bermain Excel Dengan Pyton31

dibayangkan bagaimana melelahkannya kegiatan tersebut bagi mata saya. Oleh karena itu saya memutuskan membuat suatu program yang dapat memecahkan masalah saya ini. Untungnya kode sandi tersebut memilik format pattern yang terdefinisi: Kode Sandi Kirim (TC)

Huruf Huruf Desimal Desimal Hexa Hexa Hexa

Contoh : RA18A3F Kode Sandi Terima (TM)

Huruf Huruf Hexa Hexa Hexa Hexa Huruf Huruf

Contoh : CFA902BH Penyerderhanaan Masalah: Diketahui: - 1 file excel list kode sandi, 2 sheet (kirim dan terima)

- > 100 file txt, dokumen test terdapat kode sandi. - Patern Kode Sandi Kirim (TC) dengan pola kode :

huruf;huruf;decimal;decimal;hexa;hexa;hexa , - Patern Kode Sandi Terima TM dengan pola kode :

huruf,huruf,hexa,hexa,huruf,desimal,decimal . Masalah:

- Cari patern Kode sandi kirim dan terima pada setiap file txt. - Catat jumlah temuan kode sandi dari setiap dokumen/file. - Bandingkan patern kode sandi yang ditemukan pada file txt dengan list

excel. - Jika ditemukan, dilist excel buat tanda “x” pada kolom “crosscheck” tepat

disampingnya kode sandi yang ditemukan. - Jika tidak ditemukan catat kode sandinya.

Sebelum memulai kegiatan kita, saya ingatkan bahwa kisah diatas adalah fiktif

belaka, tetapi bukan tidak mungkin kita memiliki kejadian serupa. Jika ada kesamaan kisah, maka itu hanya kebetulan belaka dan tidak ada hubungannya dengan saya.

Bab 2.

Memulai

Apa itu Python? Merupakan pertanyaan dasar yang harus saya jawab disini sebelum memulai semuanya. Tentunya untuk memudah pemahaman, saya mencoba menjelaskan secara ringkas. Pada dasarnya Python ini merupakan bahasa pemograman yang digunakan untuk menunjang semua kebutuhan kita yang berhubungan dengan Informasi teknologi, seperti bahasa pemograman lainnya VB, C/C++, PHP, Java, dll, python ini memiliki aturan syntax dan tatacara pemakaian yang tidak jauh berbeda

Page 8: Bermain Excel Dengan Pyton31

dengan saudaranya yang saya sebutkan tersebut.. Pembuatnya sendiri mengatakan bahwa python ini sangat mudah digunakan dan memiliki kemampuan yang handal. Satu hal yang perlu diingat bahwa Python ini berorientasi Interpreter.Ini yang membedakannya dengan bahasa pemograman C/C++, VB,dll.Tetapi dia lebih mirip dengan PHP yang merupakan bahasa interpreter juga. Apa interpreter itu? Artinya dibutuhkan pendukung agar program python yang kita buat bisa dijalankan, tanpa perlu membuat binary, executable filenya. Cukup membuat file dengan ekstensi yang sesuai, untuk python adalah “.py”, sedangkan akar rumpun python ini merupakan bahasa C. Untuk memahami lebih detail mengenai python langsung saja berkunjung ke rumahnya disini: http://docs.python.org/py3k/tutorial/index.html , dan tentunya si wiki : http://en.wikipedia.org/wiki/Python_(programming_language) .

a. Instal Python Sebagaimana saya jelaskan diatas memiliki program python merupakan

keharusan agar kita dapat membuat dan menjalankan program yang ingin kita buat. Tentunya sebelum menginstal kita harus memiliki source python dapat diunduh dilink berikut : http://www.python.org/download/, tentunya saya sertakan dalam CD. Silahkan pilih source yang sesuai dengan kebutuhan anda, ingat dalam hal ini, penggunaannya lebih pada python di atas system operasi Windows. Setelah anda memperoleh sourcenya tersebut, lanjutkan dengan penginstalan, cukup melakukan hal seperti biasa layaknya menginstall windows anda, yaitu klik next-next saja. Yang perlu diingat adalah lakukan instalasi

seluruhnya jangan menghilangkan component apapun terutama IDLE, kita

memerlukan ini.

b. Tool yang dipakai Sebenarnya untuk membuat program python cukup menggunakan text

editor biasa, seperti notepad (Widows), Ms-dos editor(Dos),TextEdit(Mac Os X), Gedit(Ubuntu) dsb. Tentunya hal tersebut memiliki banyak kekurangan. Diantaranya sulit sekali kita mengetahui kesalahan penulisan syntax karena tidak ada perbedaan warna, dan kita harus memiliki kemampuan yang tinggi dalam pemograman bahasa pemograman yang kita gunakan. Waktu adalah bagian terpenting dalam suatu pekerjaan, oleh karena itu semakin cepat kita menyelesaikan pekerjaan semakin baik. Kemudahan dalam melakukan pemograman menjadi salah satu kunci penting. Untuk itu sebaiknya kita menggunakan IDE (Integrated Design/Debugging Environment). Apa itu IDE? Ini merupakan software aplikasi yang terintegrasi bukan saja terdapat editor untuk membuat program tetapi juga terdapat interpreter/ compiler, otomasi tools, bahkan debugger. Ketika kita menginstal python kedalam OS, secara otomatis/ sudah termasuk paket didalamnya terdapat IDE, yaitu IDLE. Oleh karena itu pada saat penginstalan jangan pernah menghilangkan component/ paket IDLE ini. Walau pun juga ada IDE lainnya yang terpisah, biasanya memiliki kelebihan tertentu seperti BoaConstructor, Netbeans, Komodo dll.

Page 9: Bermain Excel Dengan Pyton31

Pada tahap berikutnya kita akan selalu menggunakan IDLE, dapat dibuka dengan cara meng-klik: Start -> All Programs -> Python 3.1 -> IDLE. Selain itu jika kita ingin menggunakan python secara langsung melalui command line/ dos prompt, maka kita bisa menambahkan pada Path dari Environment Variable di windows. Dapat melakukannya dengan cara : klik Control Panel->System->Advanced->Environment Variables, lalu klik pada variable named PATH di “System Variables” frame, kemudian pilih edit dan tambahkan Pathnya ;C:\Python31 pada akhir bagian path yang sudah terdapat disitu. Tentunya nama directory/folder yang digunakan tergantung pada folder yang dipakai untuk meletakan program python kita (jika tidak melakukan perubahan seharusnya tetap sesuai contoh saya itu). Penambahan Path dalam Environment Variable ini bisa juga dilakukan melalui batch command( mengenai batch command silahkan membaca buku saya yang membahas topic ini tersendiri). Penting bagi kita untuk melakukan penambahan path tersebut, karena akan memudahkan kita dalam menjalankan program setelah program kita jadi, sehingga cukup meng-klik file yang berekstensi “.py” buatan kita.

c. Referensi, Manual Tahap berikutnya adalah memahami bagaimana menggunakan python

yang sudah terinstal di komputer kita. Mau tidak mau kita harus mengerti bagaimana syntax dari si Python itu sendiri. Satu-satunya cara adalah membaca manual dari python sebagaimana umumnya kita ingin menggunakan suatu alat/barang baru bacalah buku petunjuk pemakaiannya.

Manual ini pun sudah satu paket saat kita melakukan installasi, ada di: start->All Programs->Python 3.1->Python Manuals. Atau diwebsite resminya mengenai dokumentasi si python; http://docs.python.org/contents.html. Lain halnya jika kita menggunakan linux, maka secara default sudah terinstall python.

d. Helo word Akhirnya kita sampai pada tahap action, sekarang waktunya beraksi

setelah berlama-lama dengan obrolan ngalur-ngidul. Langkah-langkah berikut ini akan lebih banyak ke pemogramannya, oleh karena itu saya sangat sarankan kita melakukannya bersama, mulailah membuka IDLE anda.

Jika anda mengikuti saran saya maka akan terbuka satu buah window dengan “Python Shell”, didalamnya terdapat versi python dan keterangan lainnya serta prompt untuk command line dengan tanda >>>. Tampilannya sbb:

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>>

Disitulah kita dapat langsung mengetikan syntax python. Mengingat ini adalah python pertama kita, sapaan “Helo Dunia” akan menjadi kalimat pembuka untuk aksi ini. Cukup menggunakan fungsi “print()” tanpa tanda petik. Perlu diketahui untuk versi 2.x. belum menggunakan fungsi ini, yang dipakai adalah perintah “print” yang mirip dengan C. Mulai versi 3.0 perintah “print” dihilangkan dan sebagai penggantinya menjadi fungsi “print()” ini, cara

Page 10: Bermain Excel Dengan Pyton31

penggunaannya menjadi berbeda karena pada versi 3.0 sudah bukan perintah lagi melainkan fungsi

>>> print('helo dunia') helo dunia >>>

Setelah fungsi print dijalankan dengan menekan tombor “enter”, maka secara langung output-nya pun keluar, dibawah perintah itu secara langsung.

Contoh diatas belum sepenuhnya baik untuk mencapai tujuan kita, yaitu membuat program python dalam bentuk file “.py”, oleh karena itu untuk mempermudah kita maka mulai saat ini kita akan menggunakan file sebagai latihan kita. Caranya: dari windows IDLE (python shell) yang sudah terbuka klik toolbars menu “File” atau menggunakan shortcut tekan tombol Ctrl+N. Akan terbuka window baru dengan nama “Untitled”. Diwindow baru inilah kita akan mengetik program python kita, yang kemudian disimpan dalam file dengan ekstensi .py.

Kita buat kembali file python pertama kita yaitu helo dunia, setelah itu

simpan file dengan menekan tombol “Ctrl+S”, buat nama file sesuai selera anda tapi jangan lupa diakhiri denga ekstensi .py. Hati-hati dengan penggunaan hurus Capital dan huruf kecil karena program python ini caseSensitive.

# Python pertama ku # Filename : heloDunia.py # oleh : ras print(“helo dunia”)

Hasil: >>>==========================RESTART========================== >>> helo dunia >>>

Penjelasan : Dalam file tersebut terdapat tambahan keterangan mengenai nama file dan pembuatnya. Tanda pagar (#) digunakan untuk memberi komentar dalam file program kita, interpreter python tidak akan mengolah semua kalimat atau kata yang mengikuti tanda pagar itu. Selain berguna untuk membuat komentar/keterangan, tanda pagar ini dapat kita pergunakan saat melakukan debugger untuk menonaktifkan beberapa baris coding kita. Tanda kutip dua (“) digunakan untuk menulis string, dalam hal ini kalimat halo dunia adalah string yang ingin kita tampilkan. Bisa juga menggunakan tanda kutip satu (‘) untuk menulis string,sedangkan jika ingin menulis string/kalimat yang terdapat dua tanda kutip tersebut(‘/”) maka kita bisa menggunakan tanda kutip tiga (```). String pada fungsi “print()” diletakan didalam kurung,

Page 11: Bermain Excel Dengan Pyton31

penggunaan fungsi ini benar-benar suatu peningkatan yang berarti, karena secara otomatis akan tampil keterangan argument yang bisa digunakan dalam fungsi ini. Catatan: Sebelumnya saya sudah terbiasa menggunakan python 2.6, lalu ketika hendak beralih ke versi baru ini muncul rasa was-was karena saya harus merubah pola algoritma pemograman saya dan tentunya harus mempelajari lagi fungsi, method, dan hal-hal baru lainnya. Tapi kenyataannya jika kita tidak mau mengikuti perkembangan maka kita akan tereliminasi, dan ternyata versi baru ini benar-benar membuat saya semakin jatuh cinta.

Bab 3

Langkah selanjutnya

Kini saatnya kita kembali pada persoalan kita, pemikiran pertama adalah bagaimana membaca file text menggunakan python. Selain itu untuk kode sandi maka diperlukan pencarian format kode sandi pada text file untuk dapat dibandingkan dengan list kode sandi pada file excel, disinilah kita akan menggunakan Regular Expression sebagai pencari pattern/format file.

a. Baca file Jangan lupa untuk membuka window baru dari IDLE. Sebelum memulai dibutuhkan file text yang akan kita baca, berikut file txt yang perlu kita buat untuk latihan dilangkah ini: Hari-Bulan-tahun Minggu-Januari-2011 Senin-Februari-2011 File text tersebut disimpan dengan nama “fileBaca.txt” (tanpa tanda kutip), untuk nama file ini terserah anda, tetapi nanti harus disesuaikan saat pembuatan codingnya. Sekarang mari kita mulai membuat script pytonnya. Jangan lupa untuk membuat file baru, bedakan dengan file pertama kita tadi. Dalam hal ini saya beri nama “bacaFile.py”:

#Filename: bacaFile.py #Baca File fileDibaca.txt #Pembacaan tiap baris dan pecah kata yang dipisahkan oleh tanda - #Buat file baru fileDitulis.txt untuk menulis hasil pembacaan #oleh : ras print("Mulai") fbaca = open('fileDibaca.txt', 'r') ftulis = open('fileDitulis.txt', 'w') for baris in fbaca: print (baris) pecah = baris.split("-") for pisah in pecah: print (pisah) tulis = pisah + '\n'

Page 12: Bermain Excel Dengan Pyton31

ftulis.write(tulis) ftulis.close() fbaca.close()

Hasil : Lihat pada folder yang sama dimana kita meletakan file “bacaFile.py” dan “fileDibaca.txt”, kita akan memperoleh hasil eksekusinya berupa file “fileDitulis.txt”. Bukalah file tersebut dengan editor text yang ada, misalkan notepad, saya sendiri menggunakan editplus maka isi file tersebut akan seperti ini: Hari Bulan tahun Minggu Januari 2011 Senin Februari 2011

Penjelasan: Perintah awal print (“Mulai”) saya gunakan untuk penanda bahwa program saya mulai dijalankan, menurut saya sangat perlu bagi kita melihat suatu proses script yang kita perintahkan. Setidaknya ada sedikit interaksi. Saat ini program masih sangat sedikit, dengan begitu penandaan “Mulai” saya tersebut memang tidak akan terlihat dampaknya, tetapi sebaiknya dijadikan kebiasaan bagi kita untuk memberi interaksi dalam program yang kita buat. Pada script ini terdapat 3 kali penggunaan print(), yang kesemuanya digunakan hanya untuk kepentingan saya melihat proses melalui terminal/console shell saat script dijalankan. Membaca file atau pun menulis file merupakan proses yang berhubungan

dengan Input/Output. Method “open(filename, mode)” kita gunakan untuk membaca dan menulis file, hasil dari method ini akan menghasilkan file obyek . Saya membuat dua file obyek, yaitu fbaca dan ftulis, sesuai namanya satu digunakan untuk membaca file yang sudah ada dan kedua untuk menulis file. Pada umumnya method open ini menggunakan dua argument. Argument pertama ialah string yang berisi nama file yang akan dibaca atau ditulis, dalam hal ini nama file yg saya akan baca(fileDibaca.txt) dan tulis(fileDitulis.txt). Argument kedua berupa string dengan sedikit karakter, menggambarkan bagaimana file akan digunakan, berupa mode jika hanya bisa baca saja menggunakan karakter ‘r’, mode ‘w’ hanya bisa menulis saja dan file lama yang memiliki nama sama akan dihapus. Mode ‘a’ membuka file untuk menambahkan, data baru akan dituliskan pada akhir data lama yang berada dalam file. Argument ini mirip dengan pemograman C/C++. Script saya kali ini menggunakan statement “for”, statement tersebut digunakan untuk melakukan pengulangan pembacaan baris demi baris data yang ada di “fileDibaca.txt”. Kita dapat lihat bagaimana mudahnya pembacaan data

Page 13: Bermain Excel Dengan Pyton31

setiap barisnya, cukup menggunakan statement ini secara otomatis sudah membaca baris demi baris. Selanjutnya saya gunakan fungsi “split” untuk string. baris.split("-") artinya string baris kita pecah tiap kata yang dipisahkan oleh tanda ‘-‘.Penandaan ini bisa karakter apa saja atau pun spasi, ganti baris, tab dan return. Perhatikan logika saya, dari setiap baris kita akan memperoleh tiga kata yang kemudian akan saya tuliskan secara berurutan kebawah. Kemudian antar kalimat yang saya pecah tadi, saya pisahkan dengan satu baris kosong. Hasil pemisahkan kata tadi masih berupa list dengan nama pecah, anda dapat membayangkan ini berupa array. Sehingga pecah ini akan kita ambil per kata menggunakan pengulangan “for pisah in pecah”. Lalu kita lakukan penulisan dengan menggunakan method “write(string)”, dari obyek file yang kita buat dalam hal ini ftulis. Setelah itu jangan lupa untuk selalu menutup kembali file yang telah kita buka dengan method “close()”, melalui perintah ini maka kita akan membebaskan system yang telah dipakai oleh method open().

Perhatikan proses “run” di terminal/console yang dilakukan ketika program “bacaFile.py” dijalankan, penggunaan “print” secara otomatis akan memberikan escape sequence ganti baris. Berbeda dengan method “write” saat menulis kedalam file, tidak ada penambahan ganti baris, oleh karena itu saya berikan escape sequence ganti baris “\n”. Catatan: “for” disini merubah paradigma kita jika kita sudah terbiasa menggunakan C atau pascal. “for” statement milik python dapat melakukan pengulangan pada deretan/urutan apapun, seperti sebuah list atau string. Hal ini hampir mirip ‘php’ tetapi saya rasa lebih powerfull python. Untuk pengulangan aritmatika/angka “for” harus menggunakan fungsi “range()”. Berikut ini cuplikan yang ada pada tutorial http://docs.python.org/py3k/tutorial/controlflow.html#for-statements :

>>> for i in range(5):

... print(i)

...

0

1

2

3

4

Sebelum kita melangkah lebih jauh, ada beberapa hal mendasar yang perlu diketahui, mengenai pemograman menggunakan python ini:

• Escape Sequence

Penggunaan escape sequence diperlukan oleh python(terdapat juga dipemograman lain spt C, php, dll) untuk membedakan apakah yang ditulis sebenarnya sebuah string biasa atau bagian dari script. Sebagai contoh jika kita ingin menuliskan tanda kutip satu, agar si python mengetahui bahwa kita sebenarnya ingin menulis tanda kutip satu(‘) sebagai bagian dari string kita maka kita gunakan escape sequence backslash ditambahkan tanda kutip satu tersebut \’.

Page 14: Bermain Excel Dengan Pyton31

Penulisan string ditandai dengan menuliskan tanda kutip satu atau pun dua bahkan tiga diantara string tersebut. Ingat bahwa string adalah kumpulan dari character. Jika kita ingin menuliskan tanda kutip satu sebagai bagian dari string kita, selain penggunaan escape sequence diatas, dapat juga menggunkan tanda kutip yang lebih banyak. Misalnya tanda kutip dua, begitu juga jika kita ingin menuliskan tanda kutip dua, maka kita dapat memakai tanda kutip tiga. Hanya bisa menggunakan tanda kutip tiga (‘’’) saja, tidak bisa empat atau lebih, toh yang ada hanya tanda kutip satu atau pun dua jika kita menulis kalimat, maka jika malas memakai escape sequence dapat menggukan kutip tiga ini. Contoh: ‘’’Saya memakai ‘kutip tiga’, yang berisikan “kutip satu dan dua” dalam kalimat.’’’ Maka akan memiliki tampilan : Saya memakai ‘kutip tiga’, yang berisikan “kutip satu dan dua” dalam kalimat.

• Penamaan Identifier

Identifier adalah nama yang digunakan untuk mengidentifikasikan sesuatu, salah satu contoh identifier adalah variabel.

Character pertama identifier harus berupa hurus alphabet bisa huruf besar ataupun kecil atau sebuah garis bawah ‘_’.

Karakter berikutnya dapat berupa huruf baik besar atau kecil, garis bawah dan angka 0-9.

Nama identifier ini case sensitive artinya huruf besar dan kecil akan memiliki perbedaan, menjadi dua indentifier yang berbeda,walau nama sama. Contoh Batu dan batu adalah identifier yang berbeda.

Contoh yang benar : _nama, kel_satu, Bilangan99. Contoh yang salah : 8angka, nm mobil, nama-murid.

Untuk python versi 3.0 keatas, terdapat penambahan character yang diperbolehkan untuk membuat indentifier ini, yaitu melalui penggunaan Unicode Character Database(Detailnya dapat dilihat di PEP 3131, link: http://www.python.org/dev/peps/pep-3131/). Sebenarnya penambahan kemampuan ini demi memberi keleluasan bagi para native programmer yang menggunakan bahasa asli mereka dimana tidak terdapat dalam ASCII. Jadi untuk orang Indonesia seperti kita ini tidak usah terlalu memusingkan diri, hindari penamaan identifier dengan menggunakan Character diluar ASCII.

• Text dan Data

Terjadi perubahan pemahaman mengenai konsep text dan data(binary) pada python versi 3.x dibandingkan dengan versi 2.x. Python

Page 15: Bermain Excel Dengan Pyton31

3.0 keatas menggunakan konsep text dan data, ini berbeda dengan versi sebelumnya yang menggunakan Unicode String dan 8 bit string. Pada versi baru ini semua text adalah Unicode, tetapi encoded Unicode direpresentasikan dengan data biner. Type yang digunakan untuk menyimpan text adalah str, dan untuk menyimpan data adalah bytes.

Sebagai dampak perubahan filosophy ini, hampir semua code yang menggunakan Unicode, encoding atau data biner harus berubah. Perubahan ini akibat dari bug yang ditemukan pada versi 2.x, terutama pada masalah penggabungan encoded dan unecoded text. Pada versi 3.x kita sudah tidak perlu lagi menggunkan u”….” untuk Unicode text(yg hrs dilakukan pada versi 2.x), tetapi kita harus menggunakan b”…” untuk pernyataan data biner.

• Logical dan Physical Line

Program Python dibaca oleh parsing, input paring ini adalah deretan tokens yang dihasilkan oleh Lexical analyzer. Pyton membaca text coding sebagai Unicode, jika suatu file python tidak dapat di decode maka akan muncul syntaxError. Pembacaan file program python dibagi menjadi beberapa logical lines. Karena hal ini maka pada python dikenal dua istilah yaitu Logical line dan Physical line. Berikut penjelasannya:

- Logical Line Logical line ditandai dengan akhiran token ganti baris(newline). Statement tidak dapat melewati batasan tersebut kecuali dibolehkan oleh syntax (ex: antara pernyataan dalam pernyataan yang tergabung). Logical line terbentuk dari satu atau lebih physical line diikuti oleh aturan-aturan penggabungan baris baik secara implicit atau pun eksplisit.

- Physical Line Physical line adalah kumpulan urutan karakter yang diakhiri oleh tanda akhir baris EOL(End-Of-Line). Pada source file, semua standar penandaan akhir baris dapat digunakan; pada Unix menggunakan code ASCII LF(linefeed), Windows menggunakan CR LF(return diikuti linefeed), Mac lama menggunakan ASCII CR(Cariage Return) character. Semua form ini dapat digunakan secara sama tanpa membedakan platform.

• Pengelompokan

Perhatikan penulisan coding diatas, ada pengelompokan yang saya lakukan. Pada pemograman lain, biasanya saya membuat pola tab/memasukan beberapa spasih agar coding saya terlihat cantik dan mudah dibaca. Kali ini di Python pola ini sangatlah berarti, tab/beberapa spasih menjadi tanda bahwa coding dibawahnya merupakan satu bagian dengan yang diatas atau sebagai sub coding sebelumnya. Lihatlah setelah

Page 16: Bermain Excel Dengan Pyton31

‘for’ code dibawah saya buat lebih dalam tabnya bukan sekedar untuk mempercantik, melainkan inilah aturan yang ditetapkan si Python.

Oleh karena itu perhatikan benar penggunaan pola masuk ini, yang disebut ident oleh si phyton. Bisa saja muncul pernyataan error sbb: “unexpected ident”, ini artinya pola pengelompokan ident anda ada yang salah, teliti lagi.

b. Latihan Regex

Setelah permasalahan membaca dan menulis file terpecahkan, maka kita memasuki permasalahan berikutnya yaitu bagaimana membaca pola/patern Kode sandi kirim dan terima. Jelas penggunaan Regex manjadi solusi yang handal untuk ini. Bisa dikatakan hampir semua bahasa pemograman memiliki kemampuan untuk mengolah Regex ini, Dan saya yakin anda-anda pun sudah setidaknya pernah mengenal regex.

Regex merupakan kependekan dari Regular Expression, ini merupakan suatu tool yang sangat berguna bagi para programmer yang ingin mencari pola character dalam suatu string atau pun pola string dalam text. Disini saya bukan bermaksud menjabarkan Regex, maka kita langsung saja pada praktek penggunaannya.

Kita akan langsung menggunakan dokumen test berupa file txt, dengan nama “sensor_test.txt”. Oh iya karena itu hanya berupa contoh maka permasalahan yang ada, nantinya akan disederhanakan. Karena pada dasarnya permasalahan yang dijadikan kasus berusaha menggambarkan kondisi nyata, bahwa suatu pengetestan alat bisa terdiri dari banyak data dan dokumen. Misalkan dijelaskan bahwa kode sandi kirim terdiri lebih dari 1000 kode, maka dalam latihan kita kali ini hanya akan menggunakan 56 kode, begitu juga untuk file yang dikatakan terdapat lebih dari 100 dokumen kita hanya akan menggunakan 2 dokumen.

Tentunya semua ini tidak akan mengurangi fungsi dan tujuan dari buku ini yaitu dapat menyelesaikan permasalahan yang ada. Perbedaan kuantitas akan memberi perbedaan waktu performance karena jumlah data yang akan diolah lebih banyak. Sedangkan untuk algoritma programannya akan memiliki kemampuan yang sama walau mengolah data yang lebih sedikit dalam hal ini misalkan 56 data terhadap 1000 data.

Dengan file “sensor_test.txt”, kita akan mencoba mencari kode sandi terima/TM. Patern/Polanya adalah huruf huruf hexa hexa hexa huruf huruf. Oleh karena itu kita akan mencarinya dengan Regular Expression module:

#Filename: RegexLat.py #Membaca patern kata sandi TM dari file Sensor_test.txt #Membuat file output sebagai hasil pembacaan pola yang diperoleh. #by Ras import re patrn = re.compile('\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.IGNORECASE)

Page 17: Bermain Excel Dengan Pyton31

print ("Mulai") f = open('sensor_test.txt', 'r') flog = open('LogTMcek.txt', 'a+') itung = 0 for line in f: pecah = line.split(" ") for pisah in pecah: m = patrn.search(pisah) if m: print (m.group()) itung = itung + 1 tulis = m.group() + '\n' flog.write(tulis) print (itung) flog.write(str(itung)) flog.close() f.close()

Hasil:

Hasil dari script ini adalah file LogTmcek.txt, jika sudah ada maka akan menambahkan data terakhir dari file, jika belum ada akan membuat baru file tersebut. Ini karena penggunaan argument ‘a+’, selain output file, pada console kita pun dapat melihat proses yang dilakukan, ingat saya menggunakan fungsi print() untuk membantu hal ini. Berikut cuplikan tampilan console yang saya sudah edit dengan membuang data pada bagian tengah untuk mempersingkat penampilannya.

>>> Mulai LH1023RY LH2023RY LH1094TY LH2094TY LH1033RY LH2033RY LH1095TY ….(bagian yg dihilangkan) LH2033RY LH1095TY LH2095TY LH1033RY LH2033RY LH1095TY LH2095TY 91 >>>

Penjelasan:

• Import re module merupakan bagian dari Python Standard Library, pada Library inilah banyak sekali paket-paket, module, atau pun program-program yang memiliki berbagai macam fungsi yang mendukung phyton.

Page 18: Bermain Excel Dengan Pyton31

Module adalah sebuah file yang berisi definisi, variable, fungsi dan perintah-perintah python, penamaannya menggunakan akhiran .py. Suatu module dapat memanggil module lain. Perintah Import digunakan untuk memanggil suatu module. Tampak bahwa saya memanggil module re dengan perintah import re.

Agar saya dapat memakai method dari regular expression maka saya harus menggunakan module re tersebut, sehingga dalam script saya pengolahan pencarian pola sandi dapat dilakukan, ini merupakan bagian penting dari pemecahan masalah kita yaitu dapat mencar pola dari sandi kirim dan terima.

• Re Module re dapat mencari pola dan strings dalam bentuk Unicode mau pun 8-bit strings. Tetapi tidak dapat mencari keduanya, sehingga dalam pencarian kita harus menentukan apakah Unicode atau 8-bit string. Re menggunakan karakter backslash ('\') untuk mengidentifikasikan bentuk khusus atau untuk mengijinkan special karakter digunakan tanpa melibatkan arti yang sebenarnya. Semoga anda tidak bingung dengan kalimat terakhir(masih ingatkah pada escape sequence?) sebenarnya hal yang penting untuk diketahui bahwa untuk memperoleh pola dari regular expression maka kita menggunakan karakter biasa atau special karakter( ex: ‘*’,’.’,’?’,’+”,dll). Saya menggunakan raw string ‘r’ dalam coding re saya, sebenarnya hal ini tidak terlalu diperlukan untuk kasus kita (anda bisa coba tulis code yang tanpa ‘r’ akan menghasilkan output yang sama), hanya kebiasanan saya saja menggunakan raw string untuk penggunaan re.Raw string sendiri digunakan untuk membedakan suatu special karakter agar terbaca sebagai karakter biasa. . Sebagai gambaran jika kita ingin mencari patern terdapat ganti baris (\n) dari suatu pola string yang ingin dicari maka, raw string harus digunakan dengan memberikan awalan ‘r’, sebagaimana saya gunakan dalam coding saya. Tanpa adanya awalan ‘r’ ini berarti bukan raw string akibatnya tanda (\n) akan dianggap sebagai ganti baris, jika kita menggunakan raw maka dibaca dua karakter yaitu ‘\’ dan ‘n’.Jika ingin menggunakan re ini perhatikan betul syntax-nya. Jangan pula lupa menggunakan escape karakter untuk membedakannya dari special karakter, jadi untuk contoh ini akan ditulis r’\\n’ agar memperoleh hasil pencarian ‘\n’. Untuk lebih dalam mengenai syntax re ini silahkan berkunjung ke help atau tutorialnya. Saya tidak ingin membahas lebih jauh, cukup yang akan kita gunakan sebagai perwakilan dapat menjadi pencerah buat anda.

patrn = re.compile('\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.IGNORECASE),

saya gunakan compile dari module re, yang digunakan untuk merubah

Page 19: Bermain Excel Dengan Pyton31

pola regular expression menjadi objek re. sehingga nantinya dapat digunakan untuk pencarian pola menggunakan method match() atau search(). Syntax sebenarnya adalah re.compile(pattern[,flags]). Flags ini bisa ada atau pun tidak, tergantung pencarian yang kita ingin lakukan, untuk kasus kita, flagnya adalah re.I atau bisa juga ditulis re.IGNORECASE, saya yakin dari kata yang digunakan sudah dapat mengetahui artinya yaitu tidak case sensitive. Dalam hal ini saya membentuk obyek “patrn” yang berisi pattern dari kode sandi yang akan saya cari dalam file. Dan nantinya akan digunakan dengan method re yang mendukung.

Contoh flag yang lain adalah re.A atau re.ASCII, digunakan untuk mencari ASCII karakter, Ini hanya berguna diantara Pola Unicode dan akan menghiraukan pola byte. Juga terdapat flag re.U/re.UNICODE, yang sebenarnya untuk Python 3 keatas secara default sudah mencari string UNICODE.

Sekarang perhatikan pola yang saya gunakan di re.compile '\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D'. Ini sesuai dengan pola kode sandi yaitu terdiri dari 8 karakter denga pattern huruf-huruf-hexa-hexa-hexa-hexa-huruf-huruf.; \D

Pencarian karakter yang bukan Unicode decimal digit. Artinya kita menghindari kode ASCII 0-9, sehingga pencarian huruf kita akan diperoleh dari kode sandi. Benar sekali pikiran anda yang kritis, diluar angka bukan cuma huruf melainkan juga terdapat karakter lain berupa tanda aritmatika, dsb. Memang benar jika terdapat tanda tersebut tentunya akan termasuk juga. Tapi perlu diingat bahwa pola yang kita cari ini sangat spesifik artinya dengan pola yang saya buat sudah dapat memperoleh hasil yang kita inginkan, tetapi jika anda tidak puas sebenarnya dapat menggunakan pola [a-z] sehingga benar-benar hanya huruf dari a hingga z yang akan dicari,penggunan kurung siku ini akan saya jelaskan selanjutnya.

Perhatikan bahwa ‘\D’ terdapat backslash ‘\’ sehingga pernyataan ini merupakan sequences karakter yang akan diartikan tersendiri oleh Python. Tetapi jika tidak terdapat dalam list yang dimiliki python maka yang akan dibaca berupa huruf setelah backslash(escape karakter) ini. Misalkan ‘\$’ maka yang dicari adalah $, mengingat dolar adalah special karakter. [A-F0-9]

Tanda ‘[]’ digunakan untuk mengidentifikasikan sekumpulan karakter. Karakter ini dapat ditulis tersendiri atau berupa jangkauan karakter dengan menggunakan tanda pemisah minus ‘-‘. Penggunaan set ini akan membuat special karakter dibaca sebagai huruf, tidak perlu menggunakan escape sequence. Sebagai contoh [12b*] akan mencari karakter ‘1’,’2’,’b’atau’*’. Pada kasus kita, saya ingin mencari hexadecimal artinya angka 0-F, maka

Page 20: Bermain Excel Dengan Pyton31

saya gunakan range [A-F0-9], ingat saya menggunakan flag IGNORECASE artinya tidak case sensitive, memang saya bertujuan untuk tetap dapat memperoleh kesamaan dari pola walaupun hurufnya adalah huruf kecil. Kita dapat mencari karakter yang tidak terdapat dalam kumpulan yang kita tulis, dengan menggunakan tanda ‘^’ maka set yang akan dicari adalah yang diluar tanda kurung siku ini, misalkan [^0-9] artinya kita mencari yang bukan angka 0 hingga 9.

• For Sebelumnya sudah saya jelaskan mengenai penggunaan for di latihan kita membaca file, disini kita hanya akan sedikit mengulang. Syntax yang digunakan adalah “for x in y:” x dapat berupa variable, list atau pun string, sedangkan y pun dapat berupa variable, list, fungsi atau string. lalu menggunakan titik dua diakhir pernyataannya. Code yang berada dalam lingkungan for ini harus berada pada kelompok sendiri dengan spasi atau tab yang menjorok lebih dalam dari code for itu( ingat penjelasan pengelompokan). For disini masuk dalam control flow yang dimiliki oleh python, untuk pengulangan selain pernyataan ‘for’ dapat juga kita gunakan pernyataan ‘while’, pada control flow ini juga terdapat control flow yang biasa kita temui di program lain, umumnya lebih mirip program C, seperti break, continue, if, dll. Penulisan selanjutnya saya tidak akan mengulang lagi penjelasan yang telah dilakukan dilatihan terdahulu.Oleh karena itu jika ingin mengingat kembali, cukup balik lembaran kertas buku ini ke hal sebelumnya.

• Split() pecah = line.split(" "), Saya menggunakan method “split()” untuk obhect string. Perhatikan bahwa saya memiliki object line yang berisikan string dari setiap baris yang ada dalam file yang kita baca (sensor_test.txt). Dari setiap baris ini saya pecah lagi dengan mengambil setiap kata yang dipisahkan oleh spasi. Logika yang saya gunakan adalah memastikan setiap kumpulan atau pun karakter yang dipisahkan oleh spasi akan dianggap sebagai satu object tersendiri, walau pun bukan terdiri satu kata. Karena setelah kita mendapatkan kumpulan string yang terpisah ini barulah kita akan mencari pola yang kita inginkan dalam satu set string tersebut. Dalam hal ini saya masukan dalam object pecah. Hasil dari split() ini juga terdiri dari list dalam object pecah, oleh karena itu pada coding kita, pecah ini pun kita pisah lagi menggunakan for agar dapat benar-benar membaca per katanya. Method split() sendiri memiliki syntax : str.split([sep[, maxsplit]]). Dimana sep adalah pemisah yang digunakan untuk membatasi string yang ingin ditangkap, saya menggunakan satu spasi

Page 21: Bermain Excel Dengan Pyton31

dengan menuliskan (“ “). Jika maxsplit digunakan maka split akan selesai saat nilai maxsplit sudah terpenuhi, tentunya jika tidak menuliskan maxsplit berarti tidak ada batasan jumlah split yang dilakukan, sebagaimana coding yang saya buat. Perlu diingat bahwa untuk re sendiri memiliki method split, jangan sampai salah pengertiannya, karena saya tidak menggunakan method spilt di re. Tentunya method split yang ada pada re ini pun dapat digunakan untuk kasus kita. Syntaxnya adalah re.split(pattern, string[, maxsplit=0, flags=0]), memisahkan string berdasarkan pattern, jika pattern berada dalam kurung, maka text dari semua group dari pattern akan masuk juga dalam list hasil. Jika maxsplit tidak sama dengan nol, saat nilai maxsplit sudah terpenuhi, maka string yang masih tersisa masuk ke dalam list element terakhir di hasilnya. Saya tidak ingin membahas lebih jauh agar tidak membingungkan karena untuk kasus kita saya tidak gunakan ini.

• Search() m = patrn.search(pisah), masih ingatkah pada object re.compile yang kita buat (patrn). Sekarang saatnya kita menggunakannya untuk pencarian, kali ini saya gunakan method search() yang dimiliki oleh re module. Bersama object patrn yang kita peroleh dan hasil pemisahan baris, dimana sebelumnya kita kumpulkan per kata, yang kita simpan didalam string pisah. Lalu kita simpan dalam object string ‘m’.

Syntax dari method ini adalah re.search(pattern, string[, flags]), method search() ini akan mencari pola yang sama didalam string. Meneliti suatu string dengan mencari lokasi dimana pola regular expression menghasilkan kesamaan dengan string, dan akan menghasilkan keluaran instance MatchObject. Sedangkan jika tidak ditemukan posisi string yang sama dengan pattern, akan menghasilkan “none”. Saya menyadari bahwa anda akan bertanya apa yang saya tulis di coding berbeda dengan syntax search ini. Pada dasarnya apa yang saya lakukan adalah sama persis. Perlu diketahui bahwa re.compile() yang kita gunakan akan mengcompile pola regular expression menjadi object regular expression. Sehingga object ini dapat digunakan menggunakan methods match() atau search(). Pada dasarnya dengan penggunaan object ini akan lebih efficient terutama untuk penggunaan beberapa kali dalam sebuah program. Sebagai contoh:

- Jika sesuai syntax maka coding kita : m = re.search('\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', pisah, flags=re.IGNORECASE)

- Sedangkan yang kita gunakan adalah : patrn = re.compile('\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.IGNORECASE) m = patrn.search(pisah)

Hasil keduanya adalah sama.

Page 22: Bermain Excel Dengan Pyton31

• If “If” termasuk control flow yang dimiliki oleh python. Pernyataan ini digunakan untuk memeriksa suatu kondisi dan jika kondisinya adalah benar maka akan menjalankan pernyataan/coding yang berada dalam if-block (ingat pada pengelompokan), else akan menjalankan kelompok coding jika kondisi tidak benar atau selain “if”. Else ini optional, bisa tidak digunakan. Saya yakin jika sudah mengenal pemograman lain maka pernyataan ‘if’ ini tentunya tidak asing. Pada kasus kita, saya menggunakan pernyataan if ini tanpa menggunakan else, karena saya hanya ingin menulis pada file saat ditemukannya kode sandi yang kita inginkan.Dengan adanya pernyataan if m:, waktu proses program akan lebih singkat jika tidak ditemukan kode sandinya. Dan tentunya menghindari penulisan data yang masih tersimpan dimemori karena tanpa adanya if code, untuk menulis file tersebut akan tetap dilalui dan diproses.Penting sekali untuk kita memiliki algoritma pemograman yang baik, salah satunya mengurangi jumlah coding yang dibaca dan diproses oleh processor, setidaknya akan mengurangi kerja dan waktu dari proses program itu sendiri.

• Group() Sebagaimana dijelaskan pada method search(), hasil yang diperoleh/ return-nya berupa instance matchobject. Match object akan selalu memiliki nilai Boolean “true”. MatchObject ini mendukung beberapa methods dan attribute, diantarnya, expand(), group(),groups(), groupdict(), start() dan lain-lain. Disini saya akan membahas method group(). Method group ini akan mengembalikan satu atau lebih subgroup hasil sama dari pencarian. Jika terdapat beberapa argument, hasilnya adalah set list dengan satu item untuk setiap argumennya. Pada kasus kita saya menggunkan default argument yaitu nol yang berarti akan mengembalikan semua string yang sama. Sehingga penulisannya tidak menggunkan angka nol, tetapi cukup

dikosongkan, dengan syntax: group([group1, ...]). m.group(), Perhatikan bahwa m adalah matcObject dari hasil pencarian pattern menggunakan re.search(), dan untuk menuliskan stringnya kita akan menggunakan method group() yang akan mengembalikan hasil pencarian.

Pada tahap ini juga, saya juga melakukan perhitungan jumlah pola sandi yang ditemukan, ini nantinya akan digunakan untuk penulisan log, sehingga kita mengetahui berapa jumlah pola kata yang ditemukan dalam suatu file. Saya menggunakan variable itung untuk proses ini.

c. Regex tanpa double

Page 23: Bermain Excel Dengan Pyton31

Hingga saat ini, kita bisa dikatakan telah memiliki perbekalan yang cukup, dari belum mengenal python,berawal dari yang sederhana hingga sekarang kita sudah bisa mambaca dan menulis ke dalam file, lalu kita sudah dapat mencari pola kode dengan menggunakan module re.

Melihat kembali permasalahan kita, tampak bahwa hasil pencarian pola

kode sandi masih diperoleh pengulangan, ini pun terlihat dari perhitungan pola sandi yang sama akan ditulis kembali dan masuk dalam perhitungan, sehingga jumlah yang ada menunjukan pengulangan yang dapat menyebabkan penafsiran yang salah. Hal tersebut yang ingin kita hindari.

Sebenarnya pada tahap ini hanya meningkatan algoritma pemograman kita

saja,tujuannya agar kita dapat mengembangkan pola pikir pada suatu permasalahan, ingat bahwa kasus yang kita temui dapat menggunakan program apa pun. Kali ini kita akan buat program yang dapat mengetahui adanya kode sandi yang sama telah dibaca. Untuk kasus tersebut algoritma anda mungkin akan berbeda dengan saya, jadi bukan tidak mungkin anda menemukan algoritma yang lebih baik dari contoh yang saya berikan.

#Filename: RegexLatUnik.py #Membaca patern kata sandi TM dari file Sensor_test.txt #Membuat file output sebagai hasil pembacaan pola yang diperoleh. #Nama file outputnya adalah LogTMcek.txt #Dapat mengetahui pengulangan suatu kode sandi yang ditemukan. #by Ras import re patrn = re.compile(r'\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.I) print ("Mulai") f = open('sensor_test.txt', 'r') flog = open('LogTMcek.txt', 'w') kbuffer = [] for line in f: pecah = line.split(" ") for pisah in pecah: m = patrn.search(pisah) if m: kflag = 'blm' for kata in kbuffer: if m.group() == kata: kflag = 'udh' break if kflag == 'blm': kbuffer.append(m.group()) print (m.group()) tulis = m.group() + '\n' flog.write(tulis)

Page 24: Bermain Excel Dengan Pyton31

print (len(kbuffer)) flog.write(str(len(kbuffer))) flog.close() f.close()

• Deklarasi variable Masih ingat tentunya pada bagian identifier, penamaan suatu item yang salah satunya adalah variable. Penggunaan variable dalam suatu coding sudah pasti tidak dapat dihindari, karena variable inilah yang akan menyimpan informasi dan kemudian akan dimanipulasi atau diolah. Dengan mendefinisikan suatu variable berarti kita sudah menyiapkan memory untuk menyimpan informasi tersebut. Tentunya variable dapat menyimpan apa pun, semua type data dapat disimpan oleh variable. Ingat bahwa sebenarnya variable ini adalah sebuah penamaan. Pada langkah-langkah saya sebelumnya telah mendefinisikan beberapa variable. Dan pada tahap ini saya juga mendefinisikan variable kbuffer dengan tipe data list. Ya saya kali ini telah membuat empty list dengan nama kbuffer, terlihat dari pernyataan yang saya tuliskan: kbuffer = []. Jika kita ingin mengetahui type data apa dari suatu variable kita dapat menggunakan fungsi-Built In, type(object). Sebagai contoh jika ingin mengetahui type kbuffer maka gunakan pernyataan type(kbuffer). Perlu diketahui bahwa Object adalah abstraksi dari data. Semua data pada Python akan di representasikan sebagai obyek atau hubungan antar obyek.Setiap obyek ini mempunyai identitas, type dan nilai. Identitas obyek tidak akan berubah sejak pertama dibuat. Type Obyek akan menentukan operasi apa saja yang bisa dilakukan oleh obyek tersebut dan menentukan nilai apa yang bisa digunakan oleh type obyek tersebut. Nilai dari suatu obyek bisa berubah dan tidak, Obyek yang nilainya dapat berubah disebut “mutable object” ( ex: dictionary dan list) dan obyek yang nilainya tidak dapat berubah disebut “immutable Object”(ex: angka, string dan tuple).

• Method append List merupakan obyek favorit yang digunakan untuk menyimpan berbagai nilai. Kita bisa menyimpan type data yang berbeda dalam list dan tentunya dapat merubah salah satu element data tersebut(mutable object). Kita dapat pula mengosongkan atau memecah list, serta beberapa tindakan lain yang dapat dilakukan pada list ini. Kita dapat menggunakan fungsi len() pada “list”, fungsi ini akan mengembalikan jumlah item dari suatu obyek. Argumennya dapat berupa string, tuple atau list. Obyek list mempunyai beberapa method, diantaranya method append() yang saya gunakan diatas. Method ini akan menambahkan item pada akhir

Page 25: Bermain Excel Dengan Pyton31

list. Syntaxnya: list.append(x).Beberapa method lain yang dapat digunakan; list.extend(L), list.insert(i, x), list.remove(x), dll.

• Break Pernyataan break ini digunakan untuk keluar dari for atau while loop. Seperti pada pemograman C. break akan mengakhiri suatu looping terdekat, dapat dilihat dengan penempatan break ini pada kelompok suatu loop. Akan meloncati option else jika berada pada if clause.

• Penjelasan program Sekarang saya ingin menjelaskan mengenai algoritmanya. Saya menggunakan list untuk menampung kata sandi yang sudah ditemukan, lalu nantinya akan dibandingkan dengan kata sandi yang didapat, apakah sudah ada dalam list penampungan, jika sudah maka akan dilewatkan(skip). Prosesnya saya menggunakan variable yang saya jadikan flag, untuk menentukan apakah perlu melakukan penyimpanan kata sandi atau skip karena sudah ditemukan, terlihat dengan penggunaan if clause yang kemudian akan melakukan break jika ternyata kata sandi sudah ditemukan. Kita melakukan pengulangan didalam pengulangan, sebenarnya algoritma ini akan memakan waktu lebih banyak, tetapi untuk kasus kita tidak apalah menggunakan metoda sederhana ini dahulu. Pada script ini pun perhitungan jumlah kata sandi yang ditemukan sudah menggunakan cara yang lebih cepat dibandingkan latihan regex kita sebelumnya yang menggunakan penambahan variable itung sebagai counter. Pemanfaatan fungsi len() yang dapat digunakan pada list, mempersingkat proses algoritma perhitungan kata sandi. Ini salah satu contoh perbaikan dari algorima pemograman. Selain jumlah pernyataan yang lebih sedikit, tentunya efisiensi waktu akan lebih baik. Oh ya saya juga merubah argument untuk file tulisnya, menjadi w,ingat kita menggunakan file yang sama ('LogTMcek.txt') sehigga jika sudah ada data dalam file akan dihapus, digantikan file yang baru, berbeda dengan sebelumnya yang selalu menambahkan jika kita menjalankan program beberapa kali. Berikut keluaran pada console yang sudah saya edit: >>> Mulai LH1023RY LH2023RY LH1094TY LH2094TY …(bagian yang dihilangkan) LH2016FY LH2015FY LH2029FY lh890FTY

Page 26: Bermain Excel Dengan Pyton31

30 >>>

Tampak bahwa sekarang kita memperoleh 30 kata sandi yang sebelumnya terdapat 91.

d. Menangkap lebih dari satu pattern ditoken dan catat pemunculannya Kini saatnya kita melakukan pengembangan lagi untuk script yang kita buat, sebelumnya kita sudah dapat menghindari pengulangan kata sandi yang ditemukan dalam dokumen, nah karena dalam suatu proses diperlukan telurus yang baik maka nantinya kita akan membuat log untuk proses yang kita lakukan diluar dari membaca dokumen dan menuliskan crosscheck pada table excel. Dalam log tersebut tentunya kita ingin mencatat berapa jumlah kata sandi yang sama ditemukan dalam satu dokumen. Oleh karena itu perlu kita melakukan pencatatan pemunculannya. Perhatikan logika algoritma yang kita gunakan, dari satu baris kalimat, kita pecah menjadi per kata berdasarkan spasi. Artinya setiap string yang terpisah oleh spasi akan kita anggap sebagai satu kata, kemudian kita simpan dalam variable/token. Dan algoritma yang kita buat ternyata mengasumsikan bahwa satu kata hanya terdiri dari satu token. Padahal bisa saja pemisahan satu kata yang berdasarkan spasi ini memiliki lebih dari satu kode di setiap katanya/ token. Dua hal yang perlu dilakukan pada langkah ini, yaitu kita harus dapat menemukan kode sandi yang terdapat dalam satu kata/token dan memberikan keterangan mengenai pemunculannya. Sekarang kita akan memikirkan bagaimana kita dapat menemukan kode sandi dalam satu kata dan dapat memberi keterangan untuk setiap kata sandi yang kita peroleh itu. Kali ini kita harus sedikit memodifikasi dokumen yang kita gunakan, untuk membedakannya saya buat file baru dengan nama sensor_test1.py. Berbedaannya sangat sederhana, pada bagian akhir file saya tambahkan kode sandi, sehingga dalam satu kata terdapat lebih dari satu kode sandi, agar kasus yang kita ingin pecahkan terwakili dengan kondisi ini.

#Filename: RegexLatUnik1.py #Membaca patern kata sandi TM dari file Sensor_test.txt #Membuat file output sebagai hasil pembacaan pola yang diperoleh. #Nama file outputnya adalah LogTMcek.txt #Dapat mengetahui pengulangan suatu kode sandi yang ditemukan. #Pada satu kata / token terdapat lebih dari satu kode sandi. #Catat jumlah pemunculan kode sandi. #by Ras import re

Page 27: Bermain Excel Dengan Pyton31

patrn = re.compile(r'\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.I) print ("Mulai") f = open('sensor_test1.txt', 'r') flog = open('LogTMcek.txt', 'w') kbuffer = [] khitung = [] for line in f: pecah = line.split(" ") for pisah in pecah: m = patrn.findall(pisah) if m: for mkata in m: kflag = 'blm' n = 0 for kata in kbuffer: n = n+1 if mkata == kata: kflag = 'udh' khitung[n-1]=khitung[n-1]+1 break if kflag == 'blm': kbuffer.append(mkata) khitung.append(1) #print (mkata) #tulis = mkata + '\n' #flog.write(tulis) n=0 for klayar in kbuffer: print(klayar) print(khitung[n]) flog.write(klayar+' ') flog.write(str(khitung[n])) flog.write('\n') n=n+1 print (len(kbuffer)) flog.write(str(len(kbuffer))) flog.close() f.close()

• re.findall() method ini akan mengembalikan semua string yang tidak beririsan yang mempunyai pola sama dengan patern yang dicari. Hasilnya berupa list string. Proses pencarian dilakukan dengan memeriksa string dari kiri ke kanan, dan hasilnya akan berurutan sesuai dengan urutan temuan. Jika satu atau lebih group ada pada pattern, akan menghasilkan list dari group, akan berupa list tuple jika patern memiliki lebih dari satu group. Temuan sama kosong akan masuk pada hasil kecuali jika bersentuhan dengan awal temuan sama lainnya.

• Penjelasan Permasalahan yang kita hadapi kali ini tidak dapat diselesaikan menggunakan method search(), ingatkan bahwa method search ini

Page 28: Bermain Excel Dengan Pyton31

meneliti suatu string dengan mencari lokasi dimana pola regular expression menghasilkan kesamaan dengan string,lalu memberikan keluaran instance MatchObject. Akibatnya jelas tidak mungkin ia dapat membedakan dua kesamaan dalam satu string(1 kata). Oleh karena itu beruntunglah terdapat method lain yang sesuai dengan kebutuhan kita, yaitu findall(). Sebagaimana saya jelaskan diatas mengenai method findall() ini, ia dapat menemukan lebih dari satu pola didalam satu string yang tidak beririsan. Karena pengembaliannya berupa string maka kita juga mengubah sedikit script penangkapan datanya, kali ini cukup memakai object list, tanpa perlu menggunakan method group yang diperlukan jika kita memakai method search().Saya pun menambahkan pengulangan untuk hasil dari findall(), karena jika ditemukan lebih dari satu kode sandi maka kita pun harus mengolahnya, dalam ini pengulangan for mkata in m: yang saya gunakan. Sedangkan untuk masalah kedua kita, yaitu mencatat jumlah pemunculan kode sandi yang sama, saya menggunakan object list baru yaitu khitung . Saya juga mendeklarasikan variable n sebagai counter, sehingga saya dapat mengubah data dari list khitung di index yang sesuai dengan list yang sudah masuk kedalam list kbuffer. Perlu diingat bahwa list ini dapat kita ubah datanya secara langsung dengan bantuan index tersebut, bisa dikatakan mirip array di C. Selanjutnya, untuk penulisannya pun baik pada console ataupun pada file saya menggunakan pengulangan for klayar in kbuffer: . Pada tampilan console saya buat tampilan jumlah kata sandi yang diulang berada dibawahnya, sedangkan pada file LogTMcek.txt, pencatatan jumlah pengulangan kata sandi yang ditemukan diletakan pada samping kata sandi dipisahkan satu spasi.Tampilan console akan seperti berikut: >>> Mulai LH1023RY 8 LH2023RY 8 LH1094TY 7 LH2094TY 7 …(bagian yang dihilangkan) LH2015FY 1 LH2029FY 1 lh890FTY 1

Page 29: Bermain Excel Dengan Pyton31

RF1033RY 1 31

Tampak bahwa jumlah kata sandi bertambah satu, sebagaimana beda data yang saya buat diakhir file, dan kita bisa lihat bahwa dalam satu kata yang memiliki lebih dari satu kode sandi telah dapat dibedakan serta kita juga telah dapat menghitung jumlah pemunculannya dalam dokumen tersebut.

Bab 4 Lebih dalam

Hingga tahap ini, kita telah membekali diri dengan kemampuan membaca kode sandi dari dokumen test, kita pun telah membuat log file yang mencatat kode sandi dan jumlah pengulangan serta total kode sandi yang ditemukan dalam satu file. Selanjutnya kita melangkah lebih dalam pada permasalahan yang kita hadapi, berikutnya yang harus kita lakukan adalah kemampuan untuk membaca file excel. Mari…

• Baca Excel, tools pendukung yang diperlukan

Sebenarnya ada beberapa cara untuk mengakses excel melalui python, diantaranya kita dapat menggunakan ODBC, COM, xlrd dan mengubah file excel menjadi format CSV. Penggunaan format CSV kurang saya sukai karena tidak murni excel yang akan kita olah sehingga kurang menyenangkan. Ada dua library yang bisa digunakan yaitu xlrd dan mycom32, kali ini saya memilih mycom32 sebagai teman untuk bermain dengan excel. Source dapat diambil di http://sourceforge.net/projects/pywin32/ . Aplikasi yang kita tambahkan adalah pywin32. Jika anda tertarik menengok library yang tidak kalah menariknya yaitu xlrd silahkan berkunjung ke http://www.lexicon.net/sjmachin/xlrd.htm . Kedua source program saya sertakan dalam cd. Paket instalasi sudah tersedia, sehingga cukup klik dua kali pada exe file, kemudian next dan next…hingga finish. Setelah pywin32 terinstal pada windows kita maka kita bisa langsung praktek menggunakan python untuk mengakses file excel kita. Nama file latihan untuk tahap ini adalah ExcelLat.py. Berikut Scriptnya: #Filename: ExcelLat.py #hitung total baris yang dipakai #Menulis hasil total pada sheet2 #Membuat sheet baru #Meyimpan dengan nama lain (TestExcel.xls) #Create by ras from win32com.client import Dispatch import os

Page 30: Bermain Excel Dengan Pyton31

lokasi = os.getcwd() file_name = lokasi+'\\excelLatihan.xls' print(file_name) excel = Dispatch('Excel.Application') excel.Visible = True workbook = excel.Workbooks.Open(file_name) workBook = excel.ActiveWorkbook activeSheet = excel.ActiveSheet sheets = workBook.Sheets sheet = sheets('Sheet1') sheet.Activate() totalrows = activeSheet.UsedRange.Rows.Count sheet = sheets('Sheet2') sheet.Activate() sheet.name = 'TotalBaris' cell = sheet.Cells(1, 1) cell.Value = 'TotalBaris' cell.Font.Size = 12 cell.Font.Bold = True sheet.Columns(1).AutoFit() sheet.Cells(1,2).value = ':' cell = sheet.Cells(1, 3) cell.Font.Bold = True cell.Font.ColorIndex = 3 cell.Value = totalrows print (sheet.Cells(1,3).Value) workBook.SaveAs(lokasi+'\\TestExcel.xls') workBook.Saved = 0 workBook.Close(SaveChanges=0) excel.Quit() excel.Visible = 0 del excel

• from win32com.client import Dispatch Dengan python kita dapat membuat script pada file terpisah, yang disebut sebagai module. Kumpulan dari beberapa module disebut paket. Suatu module pun dapat memanggil modul lain, berfungsi sebagai main module. File module ini menggunakan akhiran .py, sebagaimana lazimnya script python. Dalam module bisa berisi kumpulan perintah executable, fungsi,variable, serta apa pun yang merupakan perintah dan definisi dari python.

Page 31: Bermain Excel Dengan Pyton31

Untuk memanggil module, perintah yang digunakan adalah import module. Module dapat meng-import module lain. Penulisan perintah import ini biasanya selalu diawal module atau script, sebenarnya ini bukanlah suatu keharusan. Nama dari module yang di import akan diletakan pada table symbol global. Perintah import memiliki bentuk lain yang memanggil(import) nama dari module secara langung ke table import symbol modul, yaitu menggunakan perintah from module import item. Cara ini tidak diperlukan lagi penulisan nama module dimana item diambil. Paket adalah suatu cara untuk menstrukturisasi penulisan nama modul python dengan menggunakan “titik/dot “ diikuti nama module. Sebagai contoh module A.B merupakan submodule B yang berada dalam paket A. Menyimpan module dengan berbagai nama sesuai fungsi dan penggunaannya mempermudah kita dalam pemograman dan tentunya juga memudahkan kita saat memanggilnya karena penggunaan titik ini. Sehingga secara generic perintahnya adalah from package import item. Item ini dapat berupa sumodule atau subpackage dari package, atau nama lain yang didefinisikan dalam paket seperti fungsi, class atau variable. Pernyataan import pertama kali akan memeriksa apakah item ini didefinisikan dalam paket, jika tidak, akan menganggapnya sebagai module dan akan memanggilnya. Jika gagal akan memberi keluaran ImportError. Ketika nama suatu module di import, maka interpreter dari python akan mencari nama pada directory/folder aktif saat ini, dan kemudian akan mencari pada Folder yang terdapat di environment variable PYTHONPATH. Sama dengan syntax shell variable PATH, yaitu list dari nama folder.Jika PYTHONPATH tidak di set atau ketika file module tidak ditemukan juga, pencarian akan dilanjutkan ke path default instalasi Python.

• Win32com Sebelum membicarakan win32com, kiranya perlu saya singgung sedikit mengenai COM. Perbedaan lingkungan pemograman merupakan ide dasar tercetusnya COM ini, diharapkan dapat menjembatani kebutuhan penggunaan fungsi dan metoda suatu object dilingkungan yang berbeda. Sebagai contoh, tentunya program yang sedang kita kerjakan ini.

Secara definisi COM(Component Object Model adalah standar biner antarmuka untuk komponen software. COM ini dikenalkan oleh Microsoft, dan digunakan untuk komunikasi antar proses dan pembentukan Object yang lebih dinamis pada bahasa pemograman yang sangat beragam.

Page 32: Bermain Excel Dengan Pyton31

Interface antara Pyton dan COM terdiri dari dua bagian, yaitu : pythoncom merupakan ekstensi modul Python dan win32com merupakan Paket Python. Keduanya dikenal sebagai PythonCOM.

Modul pythoncom digunakan untuk membuka “raw COM interface”( dasar-dasar dari antarmuka COM) ke python. Untuk banyak standar interface, seperti IStream atau IDispatch, terdapat object persamaannya dalam Python seperti object PyIStream dan PyIDispatch. Object-object pyton tersebut memiliki method yang sama dengan COM interface aslinya dan tidak mendukung property.Pythoncom modul juga membuka beberapa fungsi dan konstanta COM.

Paket win32com adalah kumpulan file python yang menggunakan modul pythoncom untuk menyediakan service tambahan kepada programmer Python. Sebagaimana umumnya paket Python, win32com memiliki juga sub paket(subpackages), contohnya win32com.client digunakan untuk mendukung sisi client COM( untuk memanggil antarmuka COM), dan win32server digunakan untuk membantu penggunaan server-side COM. Setiap sub paket berisi kumpulan modul Python untuk menjalankan beberapa tugas.

• import os Module os, merupakan bagian dari python standard Lybrary. Module ini menyediakan cara untuk menggunakan fungsi yang tergantung pada operating system. Dengan menggunakan module ini kita dapat melakukan perintah-perintah yang tersedia dalam OS, spt chdir, fchdir, getcwd, ctermid, getid, dll

• os.getcwd() Method ini akan menghasilkan string yang berisi lokasi direktori aktif saat ini.

• del Sangat umum, untuk hapus ya.

Penjelasan

file_name = lokasi+'\\excelLatihan.xls' , Langkah awal saya menentukan direktori aktif dan menentukan file excel yang akan digunakan, dalam hal ini file dengan nama excelLatihan.xls. Ingat “lokasi” merupakan variable yang berisi lokasi direktori aktif saat ini dengan menggunakan module lokasi = os.getcwd().

excel = Dispatch('Excel.Application') Penjelasan dispatch Selanjutnya kita akan membuat object dengan nama “excel” yang akan digunakan sebagai interface untuk menjalankan aplikasi excel. Paket

Page 33: Bermain Excel Dengan Pyton31

win32com.client berisi beberapa modul yang menyediakan akses untuk object otomatisasi. Kita menggunakan method Dispatch('Excel.Application'), ini artinya kita akan memanfaatkan object com dalam hal ini, kita akan menggunakan IDispatch-based COM object. Metoda Dispatch() menggunakan ProgID(program ID) atau CLSID (class ID) dari object yang ingin kita buat. Karena kita akan menggunakan Excel maka ProgID dari excel adalah ‘Excel.Application’. Pada dasarnya syntax berikut ini lebih mengarah pada penggunaan object dan method yang dimiliki oleh excel, untuk lebih detilnya pelajari mengenai aplikasi excel. Kesempatan ini saya hanya akan memberi penjelasan secara singkat.

excel.Visible = True Digunakan untuk memperlihatkan file excel yang dikerjakan. workbook = excel.Workbooks.Open(file_name) Buka wokbook sesuai dengan lokasi file excel yang akan digunakan. workBook = excel.ActiveWorkbook Mengaktifkan workbook activeSheet = excel.ActiveSheetMengaktifkan sheet sheets = workBook.Sheets penamaan variable sheet. sheet = sheets('Sheet1') Pemilihan sheet 1 sheet.Activate() Mengaktifkan sheetnya totalrows = activeSheet.UsedRange.Rows.Count Menghitung baris yang digunakan pada sheet1 sheet = sheets('Sheet2') Pilih Sheet2 sheet.Activate() Lalu diaktifkan sheet.name = 'TotalBaris' Mengganti nama sheet menjadi ‘TotalBaris’ cell = sheet.Cells(1, 1) Memilih cell col 1 baris 1, utk ditulis cell.Value = 'TotalBaris' Menulis kata totalbaris pada cell col 1, brs 1. cell.Font.Size = 12 Set ukuran huruf menjadi 12 pixel cell.Font.Bold = True Buat menjadi tebal sheet.Columns(1).AutoFit() Setelah itu membuat menjadi autofit agar tulisan tampak semua. sheet.Cells(1,2).value = ':'

Penulisan dapat seperti diatas untuk menuliskan titik dua pada kolom, disini saya tidak mendefinisikan dalam variable cell spt sebelumnya..Pada dasarnya sama saja. cell = sheet.Cells(1, 3) cell.Font.Bold = True cell.Font.ColorIndex = 3 cell.Value = totalrows

Baru pada kolom 3 saya isi nilai dari total baris yang telah digunakan pada sheet 1. Disini saya mengubah warna huruf menjadi merah menggunakan colorIndex.

Page 34: Bermain Excel Dengan Pyton31

workBook.SaveAs(lokasi+'\\TestExcel.xls') Terakhir saya simpan file excel dengan nama lain agar file asli tidak berubah. Maka hasil dari script ini akan menambahkan satu file excel dengan nama “TestExcel”

workBook.Saved = 0 Menyimpan workbook workBook.Close(SaveChanges=0) Agar saat menutup tidak ada prompt pertanyaan, ini hanya jika pertama file dibentuk. Jika sudah ada file lama akan tetap menanyakan apa mau menyimpan perubahaan atau tidak. excel.Quit() Keluar dari excel. excel.Visible = 0 Ini memastikan excel.exe ditutup atau menghapusnya dari memory

del excel Menghapus object excel, dengan pernyataan del ini maka semua refrensi ke object tersebut sudah dihilangkan. Untuk memahami lebih dalam mengenai method, event dari excel silahkan pelajari macro dan vbscript untuk excel ini. Karena setelah kita menggunakan object excel yang harus kita tuliskan adalah method yang dimiliki si excel ini…sebagaimana jika kita mengunakan program automasi excel dengan program lain, mis VB..Cara yang paling mudah adalah menggunakan fungsi makronya sehingga kita bisa melihat vbscript dari tindakan yang kita inginkan…

• Baca txt file bandingkan dengan list exel lalu beri tanda

Saya rasa modal kita sudah bisa dibilang mencukupi untuk melangkah ke kasus yang kita hadapi. Sekarang kita akan mencoba membuat program yang kita butuhkan yaitu mencari pola kode sandi dalam file test dan dibandingkan dengan List kode yang berada di file excel. Untuk mempermudah pemecahan masalah jika kita mencari kesalahan suatu algoritma, maka program akan kita sederhanakan dengan mengolah Sandi Terima/TM terlebih dahulu dan kita coba dengan satu file test. Dengan cara ini maka akan memperkecil ruang lingkup pencarian permasalahan. File test yang akan kita gunakan adalah “sensor_test.txt”, sedangkan nama script baru kita adalah “BacaTM.py”… Sedikit mengingatkan, script yang akan kita buat harus dapat mencari pola sandi terima/TM dalam file ‘sensor_test.txt’ yang kemudian kita periksa di file ‘ListKodeSandi_TM-TC.xls’ kode sandi terima/TM mana saja yang digunakan pada pengetestan yang kemudian pada list kode yang kita miliki diberi tanda “X”, ini artinya kode tersebut digunakan saat test.Scriptnya : #Baca list TM dari file listKodeSandi_TM-TC bandingkan dengan file test #Memastikan tidak ada kode yang berulang #Lebih dari satu pola didalam sebuah kata

Page 35: Bermain Excel Dengan Pyton31

#Catat berapa kali kemunculannya dari satu kode #Created By Ras #Thanks to Tzushky from win32com.client import Dispatch import os import re patrn = re.compile(r'\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.IGNORECASE) print("Mulai") f = open('sensor_test.txt', 'r') flog = open('LogTMcek.txt', 'a+') itung = 0 kbuffer = [] khitung = [] for line in f: pecah = line.split(" ") for pisah in pecah: m = patrn.findall(pisah) if m: for mkata in m: if mkata != 'RS0000AA': kflag = 'blm' n = 0 for kata in kbuffer: n=n+1 if mkata == kata: kflag = 'udh' khitung[n-1]= khitung[n-1]+1 break if kflag == 'blm': kbuffer.append(mkata) khitung.append(1) itung = itung + 1 tulis = mkata + '\n' n = 0 for klayar in kbuffer: print(klayar,) print(khitung[n]) flog.write(klayar+' ') flog.write(str(khitung[n])) flog.write('\n') n=n+1 print(itung) flog.write(str(itung)+'\n') flog.close() f.close() lokasi = os.getcwd() file_name = lokasi+'\\ListKodeSandi_TM-TC.xls'

Page 36: Bermain Excel Dengan Pyton31

#Jalankan aplikasi excel excel = Dispatch('Excel.Application') excel.Visible = True #Buka file excel workbook = excel.Workbooks.Open(file_name) #Buka detail dalam excel spt sheetnya workBook = excel.ActiveWorkbook activeSheet = excel.ActiveSheet sheets = workBook.Sheets #Aktifkan sheet yang akan dipakai kerja sheet = sheets('Sandi_Terima') sheet.Activate() totalrows = activeSheet.UsedRange.Rows.Count for TmList in kbuffer: for i in range(1, totalrows+1): print(sheet.Cells(i,2).Value) if TmList == sheet.Cells(i,2).Value: sheet.Cells(i,1).Value = 'X' break workBook.Saved workBook.Close(SaveChanges=1) excel.Quit() del excel

penjelasan:

Kali ini saya tidak lagi menjelaskan mengenai syntax atau perintah yang kita gunakan karena semua yang dipakai di script ini sudah dijelaskan pada tahap-tahap sebelumnya. Sekarang saya akan menjelaskan mengenai algoritma pemograman yang digunakan. Sesuai dengan tujuan pembuatan script, maka misi utama memeriksa kode sandi dan menandai file excel list kode untuk kode yang ditemukan di file test.

Pada dasarnya tahap ini kita menggabungkan semua algoritma dan program yang telah kita buat secara terpisah-pisah. Pada awal program kita membaca file test yang kemudian kita mencari pola kode, yang selanjutkan kita tampung pada suatu ‘buffer’. Setelah itu kita pun membuka list TM yang berada dalam file ListKodeSandi, kemudian kita bandingkan antara kode TM yang berada di buffer dengan kode yang berada di list TM excel tersebut. Algoritmanya kita mengambil satu kode TM yang telah kita simpan di ‘buffer’, lalu kita melakukan pengecekan tiap baris dari kolom kode TM dengan cara membandingkan antara keduanya, jika ditemukan kesamaan maka kita memberi tanda ‘X’ pada kolom Checklist dibaris yang sama dengan kode TM yang kita temukan kesamaannya. Perhatikan perintah if yang digunakan : “if TmList == sheet.Cells(i,2).Value:”, dibawah perintah ini kita memberikan perintah untuk menulis tant “X”-nya: sheet.Cells(i,1).Value = 'X'.

Page 37: Bermain Excel Dengan Pyton31

• Penambahan note untuk data yang tidak ditemukan pada list

Sekarang kita sudah bisa dikatakan berhasil memecahkan masalah yang kita hadapi yaitu telah dapat membuat ceklist untuk setiap kode sandi terima/TM yang kita temukan dalam file test dalam hal ini sensor_test.txt. Tentunya sampai langkah ini sebenarnya kita telah menemukan solusi permasalahan, hanya saja kita belum selesai secara tuntas. Untuk memudahkan dalam melakukan dokumentasi, file log ini harus kita buat lebih jelas dan kita tambahkan catatan/note yang mencatat kode terima yang terdapat dalam file test, tetapi tidak ditemukan dalam list TM/TC yang kita miliki. Hal ini bisa saja terjadi karena adanya penambahan kode baru, tetapi data list TM/TC belum update, atau pun ada TM/TC yang digunakan saat test ternyata salah. #Filename: BacaTM.py #Baca list TM dari file listKodeSandi_TM-TC bandingkan dengan file test #Memastikan tidak ada kode yang berulang #Lebih dari satu pola didalam sebuah kata #Catat berapa kali kemunculannya dari satu kode #Catat TM kode yang tidak ditemukan dalam list TM #Created By Ras #Thanks to Tzushky from win32com.client import Dispatch import os import re patrn = re.compile(r'\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.IGNORECASE) print("Mulai") f = open('sensor_test.txt', 'r') flog = open('LogTMcek.txt', 'a+') itung = 0 kbuffer = [] khitung = [] ktakada = [] for line in f: pecah = line.split(" ") for pisah in pecah: m = patrn.findall(pisah) if m: for mkata in m: if mkata != 'RS0000AA': kflag = 'blm' n = 0 for kata in kbuffer: n=n+1 if mkata == kata: kflag = 'udh'

Page 38: Bermain Excel Dengan Pyton31

khitung[n-1]= khitung[n-1]+1 break if kflag == 'blm': kbuffer.append(mkata) khitung.append(1) itung = itung + 1 tulis = mkata + '\n' flog.write('\n'+'============================================================'+'\n') flog.write('NO'+'\t'+'TM_CODE'+'\t'+'Count'+'\n') n = 0 for klayar in kbuffer: print(klayar,) print(khitung[n]) flog.write(str(n+1)+'\t'+klayar+'\t'+str(khitung[n])) flog.write('\n') n=n+1 print(itung) flog.write(str(itung)+'\n') flog.close() f.close() lokasi = os.getcwd() file_name = lokasi+'\\ListKodeSandi_TM-TC.xls' #Jalankan aplikasi excel excel = Dispatch('Excel.Application') excel.Visible = True #Buka file excel workbook = excel.Workbooks.Open(file_name) #Buka detail dalam excel spt sheetnya workBook = excel.ActiveWorkbook activeSheet = excel.ActiveSheet sheets = workBook.Sheets #Aktifkan sheet yang akan dipakai kerja sheet = sheets('Sandi_Terima') sheet.Activate() totalrows = activeSheet.UsedRange.Rows.Count print(totalrows) for TmList in kbuffer: kflag = 'blm' for i in range(1, totalrows+1): print(sheet.Cells(i,2).Value) if TmList == sheet.Cells(i,2).Value: sheet.Cells(i,1).Value = 'X' kflag = 'ada' break

Page 39: Bermain Excel Dengan Pyton31

if kflag == 'blm': ktakada.append(TmList) kket = 'ada' flog = open('LogTMcek.txt', 'a+') if kket == 'ada': flog.write('\n'+"===List TM dr file yang tidak terdapat di TM/TC list==="+'\n') i=1 for TmTada in ktakada: flog.write(str(i)+'\t'+TmTada+'\n') i=i+1 else: flog.write('\n'+"===Semua List Tm dr File ditemukan di TM/TC list==="+'\n') flog.close() workBook.Saved workBook.Close(SaveChanges=1) excel.Quit() del excel

Penjelasan: Perubahan script untuk menambah note TM yang tidak ditemukan cukup sederhana kita hanya menambahkan ‘buffer’ tambahan untuk kode sandi yang tidak ada, lalu kita tulis dalam file log. Selain itu kita pun merapikan log pencatatan TM yang ditemukan, dan memberinya nomor… Perbedaannya dapat terlihat dengan adanya penambahan keterangan dengan perintah yang dapat kita lihat descript baru yang kita buat, diantarnya adalah perintah: “flog.write('NO'+'\t'+'TM_CODE'+'\t'+'Count'+'\n')”, “flog.write('\n'+"===List TM dr file yang tidak terdapat di TM/TC list==="+'\n')” dan “flog.write('\n'+"===Semua List Tm dr File ditemukan di TM/TC list==="+'\n')”.

Hingga kini memang kita masih berkutat pada kode sandi terima/TM, karena pada dasarnya untuk TC sama sekali tidak berbeda, hanya sedikit penyesuaian untuk pola sandi dan lokasi list pada sheet 2 (sheet kode sandi kirim/TC).

Bab 5 Tingkat Lanjut

• Penerapan pada masalah yang sebenarnya, dengan list txt yang banyak Pada Bab 4 kita telah melengkapi script yang kita buat dengan penambahan note untuk mempermudah kita menelusuri TM yang telah ditemukan dalam suatu file yang kita baca dan juga kita menambahkan catatan untuk TM yang tidak ditemukan. Bisa dikatakan hal itu telah menuntaskan kebutuhan kita. Tetapi lagi-lagi pada kenyataannya kita akan menggunakan file test yang banyak, oleh karena itu akan lebih

Page 40: Bermain Excel Dengan Pyton31

memudahkan jika kita tidak perlu satu per satu menjalankan script untuk mencari disetiap filenya. Sebagai penyederhanaan kasus, saya membuat tiga file testing, mohon maaf diantara file tersebut, isinya ada yang sangat mirip, saya terlalu malas mengarang dokumentasi file test yang lain. Intinya kita membuat simulasi dengan file yang lebih dari dua dan bisa diperbanyak berapapun karena solusi yang digunakan nantinya adalah pengulangan. Solusi kali ini saya membuat satu file text tambahan untuk membantu dalam membaca file-file test yang ada. File diberi nama FilePath.txt yang isinya kita buat format tertentu sedemikian rupa sehingga script dapat mengetahui nama-nama file test yang akan dibaca. Saya juga membuat tambahan kasus sederhana dengan mengelompokan kegiatan test yang lebih dari satu, bisa saja dalam suatu pengetesan ada pengelompokan lagi, dalam hal ini saya sebut test1 dan test2. FilePath.txt ini akan kita tuliskan secara lengkap path dan nama file yang akan ditest dan memang jika ada lebih dari seratus tentunya ini akan menjadi PR kita untuk menuliskan path dan nama filenya sebanyak itu di FilePath.txt ini. Terdapat tiga bagian, saya sebut sebagai token, token pertama menentukan kelompok test ex:Test1, lalu token kedua digunakan untuk menentukan file excel yang akan dijadikan acuan, dan token terakhir adalah tempat file test yang akan dibandingkan. Setiap token saya pisahkan dengan “tiga samadengan”(===), untuk lebih jelasnya berikut isi FilePath.txt(atau lihat langsung dalam filenya): Test1===D:\raras\artikelku\python\cd\script\ListKodeSandi_TM-TC.xls===D:\raras\artikelku\python\cd\script\sensor_test1.txt Test1===D:\raras\artikelku\python\cd\script\ListKodeSandi_TM-TC.xls===D:\raras\artikelku\python\cd\script\sensor_test.txt Test2===D:\raras\artikelku\python\cd\script\ListKodeSandi_TM-TC.xls===D:\raras\artikelku\python\cd\script\sensorEng_test.txt

Dan scriptnya yang telah disesuaikan: #Filename: BacaTM_ManyFile.py #Baca list TM dari file listKodeSandi_TM-TC bandingkan dengan file test #Memastikan tidak ada kode yang berulang #Lebih dari satu pola didalam sebuah kata #Catat berapa kali kemunculannya dari satu kode #Catat TM kode yang tidak ditemukan dalam list TM #Created By Ras from win32com.client import Dispatch import os import re import string #Patern TM yang akan dicari didokumen. patrn = re.compile(r'\D\D[A-F0-9][A-F0-9][A-F0-9][A-F0-9]\D\D', re.IGNORECASE) print("Mulai") #Baca file path untuk referensi path file yang akan digunakan

Page 41: Bermain Excel Dengan Pyton31

fpath = open('FilePath.txt', 'r') #Baca tiap baris dari file for fline in fpath: #Pecah baris menjadi token dipisahkan tanda '===' pecah = fline.split("===") tipe = (pecah[0]) fexcel = pecah[1].strip() fdocument = pecah[2].strip() #Menentukan col yang akan ditandai Test1, Test2 atau Test3 if tipe == 'Test1': nCol = 1 elif tipe == 'Test2': nCol = 2 else: nCol = 3 #Buka file dokumen txt yang akan dicari TM code-nya dan buka log file fdoc = open(fdocument, 'r') flog = open('LogTMcek.txt', 'a+') itung = 0 kbuffer = [] khitung = [] ktakada = [] for line in fdoc: pecah = line.split(" ") for pisah in pecah: m = patrn.findall(pisah) if m: for mkata in m: if mkata != 'RS0000AA': kflag = 'blm' n = 0 for kata in kbuffer: n=n+1 if mkata == kata: kflag = 'udh' khitung[n-1]= khitung[n-1]+1 break if kflag == 'blm': kbuffer.append(mkata) khitung.append(1) itung = itung + 1 tulis = mkata + '\n' #Mulai menulis pada log file flog.write('============================================================'+'\n') flog.write('Path of the file TMcode : '+fdocument+'\n') flog.write('Type of the Check : '+tipe+'\n\n') flog.write('NO'+'\t'+'TM_CODE'+'\t'+'Count'+'\n') n = 0 for klayar in kbuffer: print(klayar,) print(khitung[n]) flog.write(str(n+1)+'\t'+klayar+'\t'+str(khitung[n])) flog.write('\n') n=n+1 print(itung) flog.write(str(itung)+'\n') flog.close() fdoc.close() lokasi = os.getcwd() file_name = lokasi+'\\ListKodeSandi_TM-TC.xls'

Page 42: Bermain Excel Dengan Pyton31

#Jalankan aplikasi excel excel = Dispatch('Excel.Application') excel.Visible = True #Buka file excel workbook = excel.Workbooks.Open(file_name) #Buka detail dalam excel spt sheetnya workBook = excel.ActiveWorkbook activeSheet = excel.ActiveSheet sheets = workBook.Sheets #Aktifkan sheet yang akan dipakai kerja sheet = sheets('Sandi_Terima') sheet.Activate() totalrows = activeSheet.UsedRange.Rows.Count print(totalrows) for TmList in kbuffer: kflag = 'blm' for i in range(1, totalrows+1): print(sheet.Cells(i,2).Value) if TmList == sheet.Cells(i,2).Value: sheet.Cells(i,1).Value = 'X' kflag = 'ada' break if kflag == 'blm': ktakada.append(TmList) kket = 'ada' flog = open('LogTMcek.txt', 'a+') if kket == 'ada': flog.write('\n'+"===List TM dr file yang tidak terdapat di TM/TC list==="+'\n') i=1 for TmTada in ktakada: flog.write(str(i)+'\t'+TmTada+'\n') i=i+1 else: flog.write('\n'+"===Semua List Tm dr File ditemukan di TM/TC list==="+'\n') flog.close() workBook.Saved workBook.Close(SaveChanges=1) excel.Quit() del excel fpath.close()

Penjelasan: Sebagaimana latihan kita sebelumnya, langkah ini sudah kita ketahui

hanya merupakan kreatifitas logika kita untuk mempermudah pekerjaan saja. Pada tahap ini saya menambahkan sebuah FilePath yang kemudian dibaca oleh script dan memisahkannya dalam token yang kemudian dibuat looping untuk membaca setiap file test yang kita miliki. Telihat penggunaan for sebagai pengulangan utama berdasarkan FilePath.txt.

Page 43: Bermain Excel Dengan Pyton31

• Penggunaan Find sebagai solusi tuning

Bab 6 Penyelesaian

• Pencarian dari dua sheet(Tm dan Tc) Bab 7 Penutup

• Masih banyak kekurangan, belum sempurna, tidak menggunakan OOP. Daftar Pustaka Riwayat

Pada buku ini secara setahap demi setahap saya kembangkan programnya untuk menyelesaikan masalah yg saya hadapi. Tujuan utama adalah memberi gambaran pengembangan program secara sederhana, dengan demikian akan memudahkan dalam pencarian kesalahan dan tentunya akan memperoleh program dengan kompleksitas tinggi yang mudah untuk dipahami. Peningkatan kemampuan memahami program pun secara betahap akan meningkat seiring dengan pendalaman masalah pada buku ini, Sehigga diakhir buku kita sudah memahami bagaimana algoritma pembuatan program walau pun kita tidak atau belum menguasai bahasa pemograman yang akan kita gunakan dan tentunya penguasaan bahasa python pun diharapkan telah didapat setelah akhir buku ini.Terima kasih.