Pisahin Domain per TLD Pakai Python Biar Nggak Ngandelin Notepad++
Kalau Notepad++ mulai ngehang, gue pindah ke Python buat misahin domain per TLD, termasuk variasi .id kayak .co.id dan .net.id.
Masalahnya simpel: data kebanyakan, Notepad++ mulai ngos-ngosan
Gue lagi pegang file alldomain.txt isinya kumpulan domain, dan pengen misahin berdasarkan TLD tertentu. Contohnya .com, .net, .org, .id, terus beberapa TLD lain yang lumayan kepake kayak .dev, .ai, .io, .stream, .cloud, sama .co.
Kalau pakai mark di Notepad++ sih bisa, tapi pas datanya udah banyak banget, aplikasi sering hang. Jadi ya, gue mutusin pindah ke Python aja. Lebih enak, lebih stabil, dan bisa sekalian beresin file sumber setelah domainnya dipisah.
Kenapa regex doang nggak cukup
Di Notepad++, kalau pakai regex .com$, hasilnya memang cuma domain yang bener-bener berakhir dengan .com. Jadi com.br nggak ikut ke-mark. Itu bagus.
Tapi ada kasus lain yang agak ribet, terutama buat .id. Gue nggak cuma mau ambil domain yang berakhir dengan .id doang, tapi juga variasinya seperti:
.co.id.net.id.my.id.or.id.ac.id.sch.id.go.id.mil.id
Jadi lebih aman kalau logikanya ditulis di Python pakai endswith() dan di-handle secara spesifik.
Solusi: script Python buat pisahin domain
Script ini baca alldomain.txt, lalu memisahkan domain ke file terpisah sesuai TLD. Hasilnya misalnya:
domain_com.txtdomain_net.txtdomain_org.txtdomain_id.txt- dan seterusnya
Setelah domain yang cocok dipindah, domain itu juga dihapus dari file sumber. Jadi alldomain.txt tinggal nyisain yang belum masuk kategori.
import os
from collections import defaultdict
input_file = 'alldomain.txt'
tlds = [
'.com', '.net', '.org', '.dev', '.ai', '.io',
'.stream', '.cloud', '.co'
]
id_variations = ['.id', '.co.id', '.net.id', '.my.id', '.or.id', '.ac.id', '.sch.id', '.go.id', '.mil.id']
with open(input_file, 'r', encoding='utf-8', errors='ignore') as f:
domains = [line.strip() for line in f if line.strip()]
domain_groups = defaultdict(list)
remaining_domains = []
for domain in domains:
matched = False
lower_domain = domain.lower()
for vid in id_variations:
if lower_domain.endswith(vid):
domain_groups['.id'].append(domain)
matched = True
break
if not matched:
for tld in tlds:
if lower_domain.endswith(tld):
domain_groups[tld].append(domain)
matched = True
break
if not matched:
remaining_domains.append(domain)
for tld, dom_list in domain_groups.items():
clean_tld = tld.lstrip('.').replace('.', '_')
output_file = f'domain_{clean_tld}.txt'
with open(output_file, 'w', encoding='utf-8') as f:
for dom in sorted(dom_list):
f.write(dom + '\n')
print(f'✅ {len(dom_list):,} domain disimpan ke → {output_file}')
with open(input_file, 'w', encoding='utf-8') as f:
for dom in sorted(remaining_domains):
f.write(dom + '\n')
print(f'\nSisa domain yang tidak masuk kategori: {len(remaining_domains):,}')
print('Proses selesai! 🎉')Cara pakai
- Simpan script di atas sebagai
separate_domains.py. - Taruh
alldomain.txtdi folder yang sama. - Jalankan command ini:
python3 separate_domains.pyKalau semua beres, script bakal bikin file per TLD dan otomatis ngerapihin file sumber.
Catatan kecil biar nggak salah nangkep
- Matching pakai
endswith(), jadi.com.brnggak bakal keambil pas targetnya.com. - Variasi
.iddiprioritaskan dulu sebelum TLD umum. - Script ini case-insensitive karena domain diubah ke lowercase saat dicek.
- Hasil output disortir alfabet biar enak dibaca.
Kalau mau dikembangin lagi
Gue rasa script ini udah cukup kepake buat kerjaan harian. Tapi kalau mau, masih bisa ditambah fitur lain kayak:
- hapus duplikat domain
- validasi domain biar yang aneh-aneh dibuang
- bikin folder output otomatis
- progress bar kalau file-nya gede banget
Intinya, kalau data udah terlalu banyak buat diutak-atik manual, Python itu jauh lebih waras. Notepad++ tetap kepake, tapi buat kasus kayak gini mending serahin ke script aja.
Tags: Catatan Teknis, Python, Domain, Regex, Notepad++