Modul 9: Pengolahan String

String

Anda sudah tau apa itu tipe data string, di modul kali ini kita akan membahas apa saja yang bisa dilakukan dengan string. Menguasai pengolahan string sangat penting karena dapat membantu kita dalam mempermudah pekerjaan yang melibatkan file teks. Ada banyak sekali sumber file teks, misalnya blog, social media, file dokumen, file log server, dan sebagainya. Anda misalnya ingin mencari berapa banyak suatu kata muncul di dalam file teks, atau ingin menjumlahkan semua angka yang ada di dalam file teks, atau bisa juga mengumpulkan semua alamat email yang ada pada halaman website, dan banyak lagi yang bisa dilakukan melalui pemrosesan string.

  • Mengolah string

    • Membuat string

    • Lower, Upper

    • Concatenation

    • Split, Join

    • Find, Replace

    • String formatting

  • Membaca file teks

  • Menggunakan regular expression

Membuat string

Sebuah string dapat dibuat dengan 4 cara:

  • 'string 1 line'

  • "string 1 line"

  • '''string multi-line'''

  • """string multi-line"""

s1 = 'ini string'
s2 = "ini juga string"
s3 = '''ini string bisa 
multi-line'''
s4 = """ini juga string bisa
multi-line"""
print(s1)
print(s2)
print(s3)
print(s4)
s4
ini string
ini juga string
ini string bisa 
multi-line
ini juga string bisa
multi-line
'ini juga string bisa\nmulti-line'

Terlihat saat nilai s4 dioutputkan, ia tetap sebuah string, namun mengandung karakter spesial berupa newline \n. Sehingga tanpa menggunakan """ """ pun kita tetap bisa membuat string multi-line dengan menambahkan \n.

s5 = 'ini adalah string\nmulti-line'
print(s5)
ini adalah string
multi-line

Jika string terlalu panjang, terkadang sulit untuk dilihat karena melebihi layar monitor, hal ini bisa dibantu dengan menggunakan spesial karakter \ yang membolehkan kita menyambung string di baris berikutnya namun tetap sebenarnya python melihat sebagai string satu baris (tanpa \n).

s6 = 'string ini panjang sekali sehingga melebihi layar monitor, \
kita harus scroll horizontal untuk melihat sisa stringnya. \
Tentu saja akan lebih baik jika kita pindahkan ke baris berikutnya \
hanya sekedar untuk kebutuhan tampilan saja'

print(s6)
s6
string ini panjang sekali sehingga melebihi layar monitor, kita harus scroll horizontal untuk melihat sisa stringnya. Tentu saja akan lebih baik jika kita pindahkan ke baris berikutnya hanya sekedar untuk kebutuhan tampilan saja
'string ini panjang sekali sehingga melebihi layar monitor, kita harus scroll horizontal untuk melihat sisa stringnya. Tentu saja akan lebih baik jika kita pindahkan ke baris berikutnya hanya sekedar untuk kebutuhan tampilan saja'

Mengubah case string

Python menyediakan beberapa fungsi untuk mengubah case sebuah string, antara lain:

  • <string>.upper(): mengubah semua huruf menjadi kapital

  • <string>.lower(): mengubah semua huruf menjadi kecil

  • <string>.capitalize(): mengubah huruf pertama string menjadi kapital

  • <string>.title(): mengubah huruf pertama setiap kata menjadi kapital

Semua fungsi di atas akan mengembalikan string baru dengan case yang telah diubah, bukan mengubah string asli.

s1 = 'iNi StRing 123#'

print(s1.upper())
print(s1)

s2 = s1.lower()
print(s2)

s3 = s1.capitalize()
print(s3)

s4 = s1.title()
print(s4)
INI STRING 123#
iNi StRing 123#
ini string 123#
Ini string 123#
Ini String 123#

Menggabungkan string (concatenation)

Beberapa string dapat digabungkan menjadi sebuah string baru dengan tanda + (plus).

s1 = 'Telkom'
s2 = 'University'

s3 = s1 + ' ' + s2
print(s3)
Telkom University

Menggabungkan string dari list

Jika diberikan sebuah list berisi sejumlah string, maka dapat dibentuk sebuah string gabungan semua string dalam list yang dipisahkan oleh sebuah separator. Fungsi yang digunakan adalah <separator>.join(<list>).

list_string = ['directory', 'subdirectory', 'subsubdirectory', 'filename']
path = '/'.join(list_string) #separator adalah tanda /
print(path)

list_kata = ['aku', 'mahasiswa', 'Fakultas', 'Informatika', 'Telkom', 'University']
kalimat = ' '.join(list_kata) #separator adalah sebuah spasi
print(kalimat)
directory/subdirectory/subsubdirectory/filename
aku mahasiswa Fakultas Informatika Telkom University

Memisahkan string ke list

Tak jarang kita diberikan teks yang panjang, dan ingin mengolah tiap kata dari teks tersebut, untuk itu kita perlu memisahkan dahulu setiap kata dalam sebuah string. Fungsi yang digunakan adalah <string>.split(<separator>). Default separatornya adalah spasi.

kalimat = 'Setiap hari    aku belajar Python agar aku bisa jadi programmer handal'
list_kata = kalimat.split()
print(list_kata)

paragraf = 'Telkom University sinergi bangung negeri. Maju dalam ilmu pengetahuan. Satukan tekad bersama padukan langkah. Bawa bangsa menuju garis depan.'
list_kalimat = paragraf.split('.')
print(list_kalimat) #perhatikan bahwa ada 4 kalimat, namun hasil split ada 5, karena diakhir ada titik. 
print(len(list_kalimat))

paragraf_multi = '''Telkom University sinergi bangun negeri
Maju dalam ilmu pengetahuan
Satukan tekad bersama padukan langkah
Bawa bangsa menuju garis depan'''

list_kalimat = paragraf_multi.split('\n') #split berdasarkan baris bisa dilakukan dengan karakter escape'\n'
print(list_kalimat)
['Setiap', 'hari', 'aku', 'belajar', 'Python', 'agar', 'aku', 'bisa', 'jadi', 'programmer', 'handal']
['Telkom University sinergi bangung negeri', ' Maju dalam ilmu pengetahuan', ' Satukan tekad bersama padukan langkah', ' Bawa bangsa menuju garis depan', '']
5
['Telkom University sinergi bangun negeri', 'Maju dalam ilmu pengetahuan', 'Satukan tekad bersama padukan langkah', 'Bawa bangsa menuju garis depan']

Mencari Substring

Pencarian substring dalam string merupakan salah satu operasi yang umum dilakukan pada string. Misalnya kita ingin mengekstrak suatu informasi yang ada di dalam kalimat berdasarkan pola tertentu.

Pencarian substring dapat dilakukan dengan:

  • <string>.find(<substring>): akan mengembalikan index awal substring yang pertama yang ditemukan, jika tidak ditemukan akan mengembalikan -1

  • <string.index(<substring>): sama seperti find(), namun jika tidak ditemukan maka akan menimbulkan exception

text = 'seratus dua puluh ribu rupiah (Rp 125.000)'

start = text.find('(Rp')
end = text.find(')')
print(start, end)

nominal = text[start+1:end]
print(nominal)
30 41
Rp 125.000

Mengganti Substring

Penggantian substring dilakukan dengan <string>.replace(<old>, <new>) yang akan mengganti semua substring lama dengan substring baru. Seperti biasa, karena string immutable, maka tidak mengubah string awal tapi mengembalikan string baru.

text = 'seratus dua puluh ribu rupiah (Rp 125.000), dan lima puluh rupiah (Rp 50)'
newtext = text.replace('(', '[')
print(newtext)
newtext = newtext.replace(')', ']')
print(newtext)
seratus dua puluh ribu rupiah [Rp 125.000), dan lima puluh rupiah [Rp 50)
seratus dua puluh ribu rupiah [Rp 125.000], dan lima puluh rupiah [Rp 50]

Latihan

  1. Kalimat polindrom. Jika sebuah kalimat tersusun dari kata-kata yang susunannya sama jika dibaca dari kiri maupun jika dibaca dari kanan, maka kalimat tersebut disebut kalimat polindrom. Case huruf tidak diperhatikan dalam menentukan polindrom. Buatlah fungsi untuk mengecek (True/False), sebuah string kalimat apakah polindrom atau tidak.

kalimat1 = 'satu dua satu' #ini kalimat polindrom
kalimat2 = 'satu dua dua satu' #ini kalimat polindrom
kaliamt3 = 'satu dua dua' #ini bukan kalimat polindrom

#kode anda di sini
  1. Diberikan sebuah teks laporan pertandingan sepak bola, anda diminta mengurutkan kalimat pada teks tersebut berdasarkan yang paling menarik, yaitu yang paling banyak mengandung informasi menit (xx’).

laporan = """
AC Milan meraih kemenangan fantastis di pekan ke-31 Liga Italia. Sempat tertinggal dua gol, \
Rossoneri akhirnya menang 4-2 atas Juventus. Di San Siro, Rabu (8/7/2020) dini hari WIB, \
Adrien Rabiot (47') dan Cristiano Ronaldo (53') sempat membawa Juve unggul lebih dulu, \
namun Milan berhasil bangkit di sisa waktu.

Gol-gol dari Zlatan Ibrahimovic (62'), Franck Kessie (66'), Rafael Leao (68'), dan Ante Rebic (80') \
memastikan Milan pulang membawa poin penuh.
"""

print(laporan.split('\n'))
#kode anda di sini
['', "AC Milan meraih kemenangan fantastis di pekan ke-31 Liga Italia. Sempat tertinggal dua gol, Rossoneri akhirnya menang 4-2 atas Juventus. Di San Siro, Rabu (8/7/2020) dini hari WIB, Adrien Rabiot (47') dan Cristiano Ronaldo (53') sempat membawa Juve unggul lebih dulu, namun Milan berhasil bangkit di sisa waktu.", '', "Gol-gol dari Zlatan Ibrahimovic (62'), Franck Kessie (66'), Rafael Leao (68'), dan Ante Rebic (80') memastikan Milan pulang membawa poin penuh.", '']
  1. Buatlah fungsi untuk menjumlahkan semua nominal rupiah yang ada dalam sebuah teks. Nominal rupiah memiliki pola ‘(Rp xxxx).

rupiah = 'Kemarin (sabtu) saya mendapat beasiswa (Rp 10.000.000), \
kemudian mendapat doorpize sebesar (Rp 1.000.000).'

#kode anda di sini. jawaban seharusnya dalam string '(Rp 11.000.000)'
'Kemarin (sabtu) saya mendapat beasiswa (Rp 10.000.000), kemudian mendapat doorpize sebesar (Rp 1.000.000).'

Membaca File Teks

Regular Expression

Salah satu hal yang sering dilakukan saat bekerja dengan teks/string adalah mencari kata, email, username, tanggal, dan teks dengan berbagai pola khusus lainnya. Yang dimaksud pola khusus misalnya kita ingin mencari tahun yang ada di dalam teks di bawah ini, dengan pola yaitu terdiri dari 4 buah digit.

Misalnya teks kita adalah:

Python adalah bahasa pemrograman tujuan umum yang ditafsirkan, tingkat tinggi. Dibuat oleh Guido van Rossum dan pertama kali dirilis pada tahun 1991, filosofi desain Python menekankan keterbacaan kode dengan penggunaan spasi putih yang signifikan. Konstruksi bahasanya dan pendekatan berorientasi objek bertujuan untuk membantu programmer menulis kode yang jelas dan logis untuk proyek skala kecil dan besar.

Python diketik secara dinamis dan pengumpulan sampah. Ini mendukung beberapa paradigma pemrograman, termasuk pemrograman terstruktur (terutama, prosedural), berorientasi objek, dan fungsional. Python sering dideskripsikan sebagai bahasa "termasuk baterai" karena perpustakaan standarnya yang komprehensif.

Python dikandung pada akhir 1980-an sebagai penerus bahasa ABC. Python 2.0, dirilis pada tahun 2000, memperkenalkan fitur-fitur seperti pemahaman daftar dan sistem pengumpulan sampah dengan penghitungan referensi.

Maka menggunakan regular expression, hal tersebut dengan cukup mudah bisa dilakukan seperti di bawah ini:

teks = '''
Python adalah bahasa pemrograman tujuan umum yang ditafsirkan, tingkat tinggi. Dibuat oleh Guido van Rossum dan pertama kali dirilis pada tahun 1991, filosofi desain Python menekankan keterbacaan kode dengan penggunaan spasi putih yang signifikan. Konstruksi bahasanya dan pendekatan berorientasi objek bertujuan untuk membantu programmer menulis kode yang jelas dan logis untuk proyek skala kecil dan besar.

Python diketik secara dinamis dan pengumpulan sampah. Ini mendukung beberapa paradigma pemrograman, termasuk pemrograman terstruktur (terutama, prosedural), berorientasi objek, dan fungsional. Python sering dideskripsikan sebagai bahasa "termasuk baterai" karena perpustakaan standarnya yang komprehensif.

Python dikandung pada akhir 1980-an sebagai penerus bahasa ABC. Python 2.0, dirilis pada tahun 2000, memperkenalkan fitur-fitur seperti pemahaman daftar dan sistem pengumpulan sampah dengan penghitungan referensi.
'''

import re

result = re.findall('\d{4}', teks)
print(result)
['1991', '1980', '2000']

Dari kode di atas, yang perlu dicermati adalah pada bagian pola regular expression yaitu '\d{4}.

  • \d : merupakan sekuen untuk mengenali pola digit

  • {4} : artinya pola sebelumnya, yaitu \d, harus muncul tepat 4 kali.

Memahami penggunaan regular expression akan sangat membantu memudahkan kita dalam mengenali pola-pola yang ingin kita cari di dalam teks. Jika dibandingkan dengan harus mengkoding secara manual menggunakan perulangan, percabangan, dan lain-lain, penggunaan regular expression jauh lebih mempersingkat kode kita.

Fokus pembelajaran regular expression adalah pada pengenalan dan pemahaman ** metacharacters dan special sequences** yang memberikan arti tertentu pada pencarian teks. Setiap sekuen karakter dapat digabungkan dengan sekuen yang lain untuk membentuk pola pencarian yang lebih kompleks.

Metacharacters

Karakter

Keterangan

Contoh Pola

Makna Contoh

Teks

Semua Kecocokan

[]

menampung himpunan karakter

“[aeiou]”

menghasilkan kecocokan jika salah satu dari karakter ‘a’, ‘e’, ‘i’, ‘o’, atau ‘u’ muncul di teks

“Cinta Programming”

‘i’, ‘a’, ‘o’, ‘a’, ‘i’

\

menunjukkan special sequence

“\d”

menghasilkan kecocokan jika pada teks terdapat sebuah karakter digit

“Python versi 2”

‘2’

.

karakter apapun

“a..n”

menghasilkan kecocokan jika pada teks terdapat sekuen yang mengandung ‘a’ yang diikuti 2 buah karakter sembarang lalu diikuti huruf n.

“aku akan makin sukses”

‘akan’, ‘akin’

^

dimulai dengan

“^informatika”

menghasilkan kecocokan jika teks dimulai dengan ‘informatika’, jika tidak maka tidak ada kecocokan

1: “informatika di hatiku” 2: “aku cinta informatika”

1: ‘informatika’ 2: Tidak ada kecocokan

\$

diakhiri dengan

“Indonesia$”

menghasilkan kecocokan jika teks diakhiri ‘Indonesia’

1: “cinta Indonesia” 2: “Indonesia tanah airku”

1: ‘Indonesia’ 2: Tidak ada kecocokan

*

nol atau lebih kemunculan

“var\d*”

menghasilkan kecocokan jika teks terdapat sekuen karakter yang dimulai dari ‘var’ lalu diikuti nol atau lebih digit.

“variable terdiri dari var1 var12 var125”

‘var’, ‘var1’, ‘var12’, ‘var125

+

satu atau lebih kemunculan

“var\d+”

menghasilkan kecocokan jika teks terdapat sekuen karakter yang dimulai dari ‘var’ lalu diikuti minimal satu buah digit

“variable terdiri dari var1 var12 var125”

‘var1’, ‘var12’, ‘var125’

{}

jumlah kemunculan yang tepat sesuai angka di dalam kurung

“var\d{3}”

menghasilkan kecocokan jika teks terdapat sekuen karakter yang dimulai dari ‘var’ lalu diikuti tepat 3 buah digit

“variable terdiri dari var1 var12 var125”

‘var125’

?

nol atau satu kemunculan

“var\d?”

menghasilkan kecocokan jika teks terdapat sekuen karakter yang dimulai dari ‘var’ lalu diikuti tepat 0 atau 1 buah digit

“variable terdiri dari var1 var12 var125”

‘var’ ‘var1’, ‘var1, ‘var1’

\|

atau

“var125|var12”

menghasilkan kecocokan jika teks terdapat sekuen ‘var125’ dan atau ‘12’. pencocokan memprioritaskan mulai dari kiri, yaitu ‘var125’ baru ‘var12’

“variable terdiri dari var1 var12 var125”

‘var12’, ‘var125’

()

untuk mengelompokkan pola lalu mengingat di memori

“(pom){2}”

menghasilkan kecocokan jika teks terdapat sekuen ‘pompom’

“pergi ke pom bensin pompom”

‘pompom’

Special Characters

Karakter

Keterangan

Contoh Pola

Teks

Semua Kecocokan

\b

sekuen karakter yang memulai atau mengakhiri kata

\bma

“TelU semakin mantap”

‘ma’ pada ‘mantap’

-

-

in\b

“TelU semakin mantap”

‘in’ pada ‘semakin’

\d

digit desimal, ekivalen dengan [0-9]

\d

“1TB2

‘1’, dan ‘2’

\s

semua jenis spasi termasuk \t, \n, \r

\s

“School of Computing”

‘ ‘ dan ‘ ‘

\S

semua karkater selain spasi \s

\S\S

“S o C!”

‘C!’

\w

semua alfanumerik (digit, alfabet, dan ‘_’)

\w\w

“A1 b_ c# 12!”

‘A1’, ‘b_’, dan ‘12’

\W

semua karakter selain \w

\W

“A1 b_ c# 12!”

‘ ‘, ‘ ‘, ‘#’, ‘ ‘, ‘!’

import re

Setelah memahami metacharacters dan special characters, maka selanjutnya kita akan melihat bagaimana menggunakannya di Python.

Pertama kita perlu mengimport module re.

Kemudian kita dapat menggunakan fungsi findall(<pattern>, <text>) yang akan mengembalikan list semua string pada teks yang cocok dengan pattern yang diberikan.

Selamat anda telah menyelesaikan Modul 9!!

Mohon berkenan memberikan Rating dan Feedback agar kami dapat meningkatkan kualitas modul ini!