() translation by (you can also view the original English article)
Di dalam tutorial sebelumnya, saya mendiskusikan bagaimana kita dapat membaca, membuka, menutup, dan menuliskan file. Di dalam tutorial ini, saya akan melangkah lebih jauh dan mendiskusikan operasi berbeda yang dapat kita lakukan pada file dan direktori (folder).
Kamu tahu, sebagai contoh, kita sering menggunakan file, dan berkerja dengan file melebihi sekedar membuka dan menutup file. Apakah kamu ingat berapa kali kamu menyalin file tersebut? Oh, atau kapan kamu menamai ulang file yang kamu download dari beberapa website karena itu memiliki nama yang kurang berarti? Itu adalah beberapa jenis operasi yang akan saya diskusikan di dalam tutorial ini.
Siap? Kalau begitu mari kita langsung ke tujuan dan mulai melakukan hal menarik dengan file dan direktori menggunakan Python!
shutil
shutil
(Shell Utilities) adalah nama module yang akan kita gunakan di dalam tutorial ini untuk melaksanakan operasi file dan direktori yang berbeda. shutil
sudah ada dalam instalasi Python, sehingga kamu tidak perlu menginstalnya secara manual. Untuk memanfaatkan module ini, yang perlu kamu lakukan adalah melakukan import
module:
import shutil
Menyalin File
Mari kita mulai dengan operasi pertama kita, yaitu menyalin file. Untuk melakukan itu, kita akan menggunakan fungsi copy()
dari module shutil
. Saya akan menggunakan file sample.pdf di dalam contoh tutorial ini. Kamu dapat mendownload file ini secara gratis atau menggunakan file yang kamu suka.
Script contoh di bawah ini akan menunjukkanmu bagaimana menyalin sample.pdf
dari desktop (tempat lokasi aslinya) ke direktori lainnya Temp
, yang juga berada di desktop.
1 |
import shutil |
2 |
shutil.copy('sample.pdf', 'Temp') |
Perhatikan bahwa saya hanya membuat daftar nama file dan direktori, karena saya berkerja dengan Terminal dengan alamat desktop yang saya gunakan. Namun kamu dapat menentukan alamat lengkap pada kedua file yang ingin kamu salin dan direktori tujuannya, yang di dalam kasus saya adalah sebagai berikut:
1 |
shutil.copy('/Users/Abder/Desktop/sample.pdf', '/Users/Abder/Desktop/Temp') |
Silahkan lakukan, buka direktori Temp
, atau direktori manapun yang kamu tentukan, dan kamu harusnya menemukan salinan file di sana!
Bagaimana jika argument kedua adalah sebuah file bukannya direktori? Dengan kata lain, mari katakan kamu mengetikkan seperti di bawah (saya menghilangkan alamat lengkap pada file, dengan berasumsi keduanya berada di desktop):
1 |
import shutil |
2 |
shutil.copy('sample.pdf', 'file.pdf') |
Dalam kasus ini, kamu akan memiliki sebuah file baru file.pdf
, yang merupakan salinan file asli sample.pdf
. Dengan demikian, jika kamu membuka file.pdf
, kamu akan menyadari bahwa itu memiliki konten yang sama karena itu sebenarnya merupakan salinan sample.pdf
.
Dapatkah sumber dan tujuannya sama? Mari kita coba dan lihat.
shutil.copy('sample.pdf', 'sample.pdf')
Itu tampaknya bahwa operasi ini akan membawa kita pada sebuah error karena nama file tidak seharusnya sama:
1 |
Traceback (most recent call last): |
2 |
File "test.py", line 2, in <module> |
3 |
shutil.copy('sample.pdf', 'sample.pdf') |
4 |
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 119, in copy |
5 |
copyfile(src, dst) |
6 |
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 69, in copyfile |
7 |
raise Error("`%s` and `%s` are the same file" % (src, dst)) |
8 |
shutil.Error: `sample.pdf` and `sample.pdf` are the same file |
Menyalin Direktori
Di dalam section ini, kita akan melihat bagaimana kita dapat menyalin keseluruhan direktori (folder) daripada sebuah file tunggal, seperti yang kita lihat di dalam section sebelumnya.
Mari katakan kita memiliki struktur direktori berikut yang ingin kita salin. Yaitu, kita memiliki direktori utama Original
, yang berisi sebuah direktori Original-1
, yang berisi direktori Original-2
, dan yang berisi direktori Original-3
, dan di dalam Original-3
kita memiliki file Sample.pdf
(phew...).



Apa yang ingin kita lakukan sekarang adalah menyalin direktori Original
dengan semua kontennya ke direktori baru, dan menyebut direktori baru itu Original-Copy
.
Ini dapat dilakukan hanya dengan menggunakan fungsi copytree()
, sebagai berikut (dengan asumsi bahwa semuanya terjadi di desktop):
1 |
import shutil |
2 |
shutil.copytree('Original', 'Original-Copy') |
Kamu harusnya sekarang menemukan sebuah direktori baru Original-Copy
dengan semua konten dan struktur Original
.
Memindahkan File
Memindahkan sebuah file seperti melakukan operasi cut-paste pada file. Di dalam section Menyalin File kita melihat bagaimana menyalin sebuah file, sembari mempertahankan file original di dalam lokasi aslinya.
Di dalam section ini, kita akan melihat bagaimana memindahkan (cut) file ke sebuah lokasi baru, sembari menghapusnya pada saat yang sama dari lokasi aslinya. Operasi ini dilakukan cukup dengan menggunakan fungsi move()
, sebagai berikut:
1 |
import shutil |
2 |
shutil.move('Sample.pdf', 'Temp') |
Perhatikan bahwa Sample.pdf
telah dipindahkan ke direktori Temp
, dan tidak ada lagi pada desktop.
Bagaimana kita memindahkan Sample.pdf
ke sebuah file baru New-Sample.pdf
, seperti berikut ini?
1 |
import shutil |
2 |
shutil.move('Sample.pdf', 'New-Sample.pdf') |
Dalam kasus ini, kamu hanya memiliki New-Sample.pdf
dengan konten yang sama seperti Sample.pdf
, namun Sample.pdf
tidak lagi ada.
Memindahkan Direktori
Memindahkan direktori dilakukan dengan menggunakan fungsi yang sama dengan yang kita gunakan di dalam section Memindahkan File, yaitu move()
. Mari kita gunakan contoh yang sama seperti di dalam section Menyalin Direktori, namun sekarang dengan fungsi move()
.
1 |
import shutil |
2 |
shutil.move('Original', 'Original-Copy') |
Di dalam kasus ini, kamu akan memiliki sebuah direktori baru Original-Copy
dengan konten yang sama seperti Original
, namun Original
tidak ada lagi.
Menamai Ulang File dan Direktori
Coba tebak? Kamu dapat juga menggunakan fungsi move()
untuk menamai ulang sebuah file atau direktori. Saya tidak akan mengulangi contoh lagi di dalam section ini. Namun, jika memperhatikan ketika menerapkan fungsi move()
pada kedua file dan direktori di atas, kami menyebutkan bahwa file/direktori asli tidak ada lagi, namun sebuah file/direktori dengan konten yang sama muncul. Ini seperti menamai ulang sebuah file/direktori, bukan?
Menghapus File dan Direktori
Itu tampaknya bahwa module shutil
tidak berisi sebuah fungsi untuk menghapus file. Namun itu punya, berisi sebuah fungsi untuk menghapus direktori: rmtree()
. Hati-hati karena penghapusan ini permanen, dan dengan demikian kamu tidak akan menemukan direktori yang dihapus di dalam Trash.
Contoh di bawah menunjukkan bagaimana kita secara permanen menghapus direktori Original-Copy
:
1 |
import shutil |
2 |
shutil.rmtree('Original-Copy') |
Jika kamu ingin secara permanen menghapus sebuah file, kamu dapat menggunakan fungsi remove()
dari module os
pada Python, sebagai berikut:
1 |
import os |
2 |
os.remove('Sample.pdf') |
Kesimpulan
Seperti yang dapat kamu lihat, kita dapat melakukan operasi penting pada file dan direktori—menyalin, memindahkan, menamai ulang, dan menghapus—dengan sangat mudah melalui module shutil dan os. Kamu dapat memeriksa dokumentasi module tersebut untuk informasi lebih lanjut tentang apa yang dapat kamu lakukan dengan mereka.