Python ile FTP Üzerinden Dosya Alma-Gönderme (ftplib)

ftplib; FTP protoküle üzerinde bir istemci oluşturmamızı sağlayan çok kullanışlı standart bir Python modülüdür.

Kullanımı da oldukça basit. Öncelikle bu modül içinde bulunan FTP sınıfından bir örnek(instance) oluşturuyoruz. Sırayla FTP adresi, kullanıcı adı ve şifresi parametre olarak veriliyor.

import ftplib

ftp = ftplib.FTP("erdoganb.com", "ftpKullanıcıAdı", "FTPŞifresi")

#
#
#

ftp.quit()

Oluşturduğumuz bu FTP örneği ile bütün işlemlerimizi yapıp sonra quit ile bağlantıyı sonlandırıyoruz.

Dosya İşlemleri

Bağlantımız ilk açıldığı anda uzak sunucunun ana dizininde işlem yapmaya uygun olacaktır. Bunu cwd metodu ile değiştirebiliriz. Yeni bir klasör açmak için de mkd metodunu kullanabiliriz. Az önceki örneğin devamı olarak;

# deneme adında bir klasör oluştur
ftp.mkd("/deneme")

# sonraki işlemleri bu klasör üzerinde yap
ftp.cwd("/deneme")

# aktif olan klasörü konsola yazar
print(ftp.pwd())

# aktif klasör içindeki dosyaları listeler
print(ftp.dir())

Dosya göndermek için iki biçim bulunuyor. Biri dosyamızı ikili bloklar halinde diğeri ise satır satır gönderim yapıyor. İki metot da ilk parametre olarak FTP komutunu ikinci parametre olarak dosyamızın open metodu ile oluşturulmuş bir dosya nesnesini alıyor. İkili gönderim seçeneğinde blokların büyüklüğünü girebileceğimiz bir üçüncü parametre de bulunuyor.

Yine önceki örneğin devamı olarak deneme klasörüne iki dosya gönderelim;


# uzak bilgisayarda aktarılacak dosyanın ismi
txt_dosya = "deneme.txt"
# yerel bilgisayarımızda dosyamızın adresi
txt_dosya_yolu = "C:\deneme.txt"

ftp.storlines("STOR " + txt_dosya, open(txt_dosya_yolu))

jpg_dosya = "resim.jpg"
jpg_dosya_yolu = "C:\resim.jpg"

# burada binary(ikili) modda okumak için "rb" parametresini verdik open metoduna
# gönderim yaparken blok boyutlarını da 1024 olarak girdik
ftp.storbinary("STOR " + jpg_dosya, open(jpg_dosya_yolu, "rb"), 1024)

Dosyalarımız aktarılmış olmalı. Yukarıda kullandığımız dir metodu ile kontrol edilebilir.

Dosya almak için ise;

# indirilecek dosyamızı yazacağımız bir nesne oluşturuyoruz
yeni_dosya = open("C:\resim_yeni.jpg", "wb")

ftp.retrbinary('RETR resim.jpg', yeni_dosya.write)

Ardışık olarak, bir döngü içinde olabilir, çok fazla istek gönderilecek ise uzak bilgisayara, bağlantı uzak bilgisayar tarafından kapatılabilir. Bunu çözmek için istekler arasına time modülünün bir fonksiyonu olan time.sleep(1) ile biraz zaman eklenebilir.

Bir Cevap Yazın