Cara Terhubung ke Server FTP Menggunakan Python

Cara Terhubung ke Server FTP Menggunakan Python

FTP (Protokol Transfer File) Tidak Membutuhkan Presentasi: Ini adalah salah satu metode transfer file yang paling banyak digunakan antara satu atau lebih klien dan server. Dengan desain itu mendukung akses dan otentikasi anonim, tetapi dalam bentuk yang paling dasar tidak memberikan enkripsi data, itulah sebabnya ia sering diamankan melalui TLS.

Banyak aplikasi klien FTP tersedia di Linux, seperti misalnya FileZilla (grafis) atau lftp (garis komando). Namun, terkadang, kami mungkin ingin mengakses server FTP secara terprogram, mungkin untuk menjadwalkan transfer file. Salah satu cara mudah untuk melakukan ini adalah dengan menggunakan bahasa pemrograman seperti Python. Dalam tutorial ini kita akan belajar cara menggunakan ftplib perpustakaan untuk berinteraksi dengan server FTP.

Dalam tutorial ini Anda akan belajar:

  • Cara membuat instance ftplib.Kelas FTP
  • Cara mendaftarkan file di server FTP jarak jauh
  • Cara mengunggah file dalam mode biner dan "baris"
  • Cara mengunduh file dalam mode biner dan "baris"
  • Cara membuat, menghapus, dan mengganti nama direktori dan file
  • Cara Mengubah Direktori Kerja
Cara Terhubung ke Server FTP Menggunakan Python

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Independen
Perangkat lunak Python
Lainnya Tidak ada izin lain yang diperlukan
Konvensi # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa

Perpustakaan FTPLIB

Itu ftplib Modul adalah bagian dari pustaka standar Python, dan menyediakan dua kelas utama untuk abstrak bekerja dengan koneksi FTP: ftblib.Ftp Dan ftplib.Ftp_tls. Yang terakhir adalah subclass dari yang pertama dan menambahkan dukungan untuk Tls. Mari kita lihat beberapa kasus penggunaan yang paling umum dari perpustakaan.

Menghubungkan ke server FTP

Untuk terhubung ke server FTP, hal pertama yang harus kami lakukan adalah membuat instance dari Ftp kelas. Kelas mendukung dengan Pernyataan sehingga dapat digunakan dengan manajer konteks: dengan cara ini, koneksi akan ditutup secara otomatis ketika kita selesai bekerja atau kesalahan terjadi. Berikut adalah contoh penggunaan:

dengan ftplib.Ftp ('ftp.Entah pos.com ') sebagai ftp: # codeHere 
Menyalin

Semua parameter dari Ftp Konstruktor kelas opsional, namun di sini kami memberikan argumen pertama yang diterima olehnya, yang merupakan tuan rumah Kami ingin terhubung ke. Jika argumen disediakan, Menghubung Metode, yang digunakan untuk membuat koneksi dengan server, secara implisit dipanggil dengan host yang ditentukan disahkan sebagai argumen, jika tidak, itu harus disebut secara eksplisit:

dengan ftplib.Ftp () sebagai ftp: ftp.Hubungkan ('FTP.Entah pos.com ') 
Menyalin

Argumen kedua yang diterima oleh Ftp Konstruktor kelas adalah pengguna Kami ingin masuk ke dalam server FTP. Memberikan argumen ini akan menyebabkan Gabung metode untuk disebut secara implisit dengan pengguna, itu kata sandi Dan acct Nilai -nilai yang dilewati sebagai argumen (mereka adalah parameter ketiga dan keempat dari konstruktor kelas, dan default ke string kosong sebagai nilai):

dengan ftplib.Ftp ('ftp.Entah pos.itu ',' testuser ',' testpassword ') sebagai ftp: # codhere 
Menyalin

Jika argumen tidak disediakan, Gabung Metode harus disebut secara eksplisit:

dengan ftplib.Ftp ('ftp.Entah pos.itu ') sebagai ftp: ftp.Login ('TestUser', 'Password') 
Menyalin

Mendapatkan daftar file di server

Satu kali an Ftp Objek dibuat, kami pada dasarnya memiliki tiga cara untuk mendapatkan daftar file yang disimpan di server FTP yang kami hubungkan. Pertama -tama kita bisa menggunakan dir metode, yang menghasilkan daftar direktori sebagaimana dikembalikan oleh DAFTAR memerintah:

>>> dengan ftplib.Ftp ('ftp.Entah pos.itu ',' pengguna ',' kata sandi ') sebagai ftp: ... ftp.dir () 
Menyalin

Itu dir Metode menerima argumen opsional, yang merupakan direktori untuk mendaftar (defaultnya adalah direktori kerja saat ini, jadi dalam hal ini root FTP). Kode di atas menghasilkan output yang mirip dengan yang berikut:

DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14:37 . DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14: 37… -rw ------- 1 ftp ftp 10 Sep 10 06:04 .FTPQUOTA -RW-R-R-- 1 FTP FTP 5306756 File 18 Okt 01:32.CSV 

Metode kedua yang dapat kita gunakan untuk mendapatkan daftar file, adalah NLST. Seperti namanya, metode ini, di bawah kap, mengirimkan a NLST perintah ke server; Ini mengembalikan daftar Python yang berisi nama file sebagai anggota:

>>> dengan ftplib.Ftp ('ftp.Entah pos.itu ',' pengguna ',' kata sandi ') sebagai ftp: ... ftp.NLST () ... [.',' ... ','.file ftpquota ','.CSV '] 
Menyalin

Metode ketiga yang dapat kita gunakan untuk mendapatkan daftar konten direktori adalah MLSD. Metode ini menggunakan MLSD Perintah (jadi agar berfungsi, server harus mendukungnya), dan menerima dua argumen opsional:

  • Itu jalur direktori yang harus terdaftar
  • Daftar informasi yang ingin kami termasuk dalam hasilnya

Metode ini mengembalikan a generator yang menghasilkan a Tuple dua elemen Untuk setiap file: elemen pertama dari setiap tuple adalah nama file; a kedua kamus berisi informasi yang diminta dan nilainya. Mari kita lihat contoh:

>>> dengan ftplib.Ftp ('ftp.Entah pos.itu ',' pengguna ',' kata sandi ') sebagai ftp: ... Untuk nama file, informasi di FTP.MLSD (): ... Cetak (nama file, informasi) 
Menyalin

Output kode di atas adalah sebagai berikut:

. 'type': 'cdir', 'sizd': '4096', 'modify': '20201013123732', 'unix.Mode ':' 0755 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e0a67 '… ' type ':' pdir ',' sizd ':' 4096 ',' ubah ':' 20201013123732 ',' unix.Mode ':' 0755 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e0a67 ' .ftpquota 'type': 'file', 'size': '10', 'modify': '20200910040430', 'unix.Mode ':' 0600 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e0a9d ' file.csv 'type': 'file', 'size': '5306756', 'ubah': '20201017233245', 'unix.Mode ':' 0644 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e020a ' 

Perhatikan bahwa server tidak dijamin untuk menghormati daftar informasi yang kami minta.

Mengambil file dari server

Untuk mengambil file dari server, kami dapat menggunakan retrbinary atau mengguncang ulang metode. Mari kita lihat bagaimana mereka bekerja.

Itu retrbinary Metode mengambil file dalam mode transfer biner: Inilah yang ingin Anda gunakan untuk hanya mengunduh file dari server ke mesin lokal Anda dan tidak perlu berinteraksi dengan kontennya. Mari kita lihat contoh penggunaannya. Katakanlah kami ingin mengunduh mengajukan.CSV dari server; Kami hanya akan menulis:

>>> dengan ftplib.Ftp ('ftp.Entah pos.itu ',' pengguna ',' kata sandi ') sebagai ftp: ... dengan open ('file.csv ',' wb ') sebagai download_file: ... ftp.Retrbinary ('file ret.csv ', download_file.menulis) ... '226 file berhasil ditransfer \ n226 0.823 detik (diukur di sini), 6.15 mbytes per detik ' 
Menyalin

Dalam contoh di atas kami membuka file lokal untuk menulis mode biner
(mengajukan.CSV) menggunakan manajer konteks, kemudian disebut retrbinary metode lewat
yang tepat Ret perintah sebagai argumen pertama (Ret Nameofthefile), dan
menulis Metode objek file download_file sebagai argumen kedua, yang
adalah panggilan balik diterapkan untuk setiap bagian data yang diterima.

Berbicara tentang potongan data, ukuran blok maksimum yang digunakan untuk transfer
data, secara default, adalah 8192 byte. Namun, ini dapat diubah melalui
parameter ketiga opsional dari retrbinary metode.

Itu mundur Metode bekerja sedikit berbeda, karena mengambil file dalam mode "Line". Argumen pertama dari metode ini, bisa menjadi valid Ret perintah, seperti yang kami gunakan dalam contoh sebelumnya, tetapi juga a DAFTAR (untuk mengambil daftar nama file dan informasi tentang mereka) atau NLST (mengambil hanya nama file). Argumen kedua dari metode ini adalah opsional dan merupakan panggilan balik yang diterapkan untuk setiap baris yang diambil (perilaku default adalah mencetak garis ke stdout). Penting untuk diperhatikan bahwa setiap baris dilucuti dari karakter akhir garis, yang di Linux adalah \N.

Mari kita lihat contohnya. Jika kita menggunakan mengguncang ulang metode, kita dapat mengambil konten dari mengajukan.CSV File Line By Line:

>>> Impor OS >>> dengan ftplib.Ftp ('host', 'user', 'password') sebagai ftp: ... dengan open ('file.csv ',' w ') sebagai csvfile: ... ftp.Retrlines ('file ret.CSV ', Lambda X: CSFile.menulis("".Bergabunglah ([x, OS.LineP]))) ... 
Menyalin

Dalam contoh di atas kami mengimpor os Modul, kemudian, seperti sebelumnya, kami membuat file secara lokal, kali ini dalam mode tekstual. Dengan ftp.mundur metode kami mengambil mengajukan.CSV baris file jarak jauh demi baris. Panggilan balik yang kami gunakan sebagai argumen kedua dari mundur adalah Lambda fungsi yang mengambil garis sebagai argumen dan memanggil menulis metode csvfile objek untuk menulis garis yang bergabung dengan LineP karakter yang sesuai untuk OS, yang kami akses os.LineP.

Kami dapat menggunakan panggilan balik untuk juga memodifikasi konten file dengan cepat. Sebagai contoh sepele, bayangkan kami ingin meningkatkan setiap kata yang terkandung dalam file jarak jauh saat kami menyimpannya secara lokal. Kami bisa menulis:

[...] ... ftp.Retrlines ('file ret.CSV ', Lambda X: CSFile.menulis("".Bergabunglah ([x.Upper (), OS.LineP]))) 
Menyalin

Metode ini, seperti yang telah kami sebutkan, dapat digunakan untuk juga bekerja dengan garis yang dikembalikan oleh DAFTAR atau NLST perintah. Misalkan kami ingin menyimpan hasil dari daftar direktori di server jarak jauh ke dalam file lokal:

>>> dengan ftplib.Ftp ('host', 'user', 'password') sebagai ftp: ... dengan terbuka ('list_result', 'w') sebagai localfile: ... ftp.Retrlines ('Daftar', Lambda X: Localfile.menulis("".Bergabunglah ([x, OS.LineP]))) 
Menyalin

File lokal List_Result akan dibuat (atau terpotong dan ditimpa jika sudah ada), dan isinya akan menjadi sesuatu yang mirip dengan:

DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14:37 . DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14: 37… -rw ------- 1 ftp ftp 10 Sep 10 06:04 .FTPQUOTA -RW-R-R-- 1 FTP FTP 5306756 File 18 Okt 01:32.CSV 

Mengunggah file ke server

Ketika kita perlu mengunggah file ke server FTP, kita juga dapat memilih untuk melakukannya dalam mode biner atau "baris". Dua metode yang dapat kita gunakan untuk menyelesaikan tugas, masing -masing: StoreBinary Dan Storelines.

Itu StoreBinary metode Ftp kelas mengambil dua argumen wajib yang valid Stor perintah, dan objek file yang dibuat dari file lokal yang dibuka dalam mode biner. Misalkan kita ingin mengunggah file; Kami akan menulis:

>>> dengan ftplib.Ftp ('host', 'user', 'password') sebagai ftp: ... dengan terbuka ('linuxconfig.txt ',' rb ') sebagai file_object: ... ftp.Storbinary ('Stor LinuxConfig.txt ', file_object) 
Menyalin

Sangat sederhana! Tentu saja, kami juga dapat menyimpan file di server dengan nama yang berbeda. Objek file dilewati sebagai argumen kedua dari Storbinary Metode dibaca sampai EOF. Sama seperti dalam kasus retrbinary Metode, dimungkinkan untuk mengubah ukuran chunk data, dengan argumen ketiga opsional (default, adalah, sekali lagi 8192 byte). Argumen keempat yang diterima oleh Storbinary metode, adalah opsional panggilan balik fungsi yang diterapkan untuk setiap bagian data.

Untuk mengunggah baris file demi baris, kami dapat menggunakan Storlines metode sebagai gantinya. Dalam hal ini file yang ingin kami unggah akan dibaca baris demi baris. Dua argumen pertama sama diterima oleh Storbinary metode, sedangkan yang ketiga (dan terakhir) adalah a panggilan balik yang diterapkan untuk setiap baris.

Menavigasi, membuat direktori, menghapus dan mengganti nama file

Itu Ftp kelas (dan Ftp_tls kelas yang memperluasnya) menyediakan juga beberapa metode yang sangat berguna untuk melakukan beberapa operasi yang paling umum. Misalnya, untuk membuat direktori di server FTP jarak jauh, kami dapat menggunakan mkd Metode yang mengambil pathname dari direktori untuk membuat sebagai argumen satu -satunya:

>>> FTP.mkd ('newdir') 'newdir' 
Menyalin

Untuk mengubah direktori kerja, kami dapat menggunakan CWD Metode, memberikan nama direktori yang ingin kami pindahkan sebagai argumen:

>>> FTP.cwd ('newdir') '250 ok. Direktori saat ini adalah /newdir ' 
Menyalin

Untuk menghapus direktori yang ada, kita dapat menggunakan RMD metode, memberikan nama direktori yang akan dihapus:

>>> FTP.rmd ('newdir') '250 Direktori berhasil dihapus' 
Menyalin

Untuk menghapus file biasa, kami dapat menggunakan menghapus Metode sebagai gantinya, meneruskan nama file yang akan dihapus sebagai argumen:

>>> FTP.menghapus berkas.CSV ')' 250 file yang dihapus.CSV ' 
Menyalin

Untuk mengganti nama file atau direktori, kami dapat menggunakan ganti nama metode. Ia menerima dua argumen: yang pertama adalah nama file atau direktori saat ini, yang kedua adalah yang baru. Untuk mengganti nama mengajukan.CSV ke file0.CSV, Misalnya, kami akan menulis:

>>> FTP.ganti nama ('file.csv ',' file0.CSV ')' 250 file berhasil diganti namanya atau dipindahkan ' 
Menyalin

Menutup koneksi secara manual

Seperti yang sudah kita pelajari, Ftp Kelas dapat digunakan dengan manajer konteks, sehingga koneksi secara otomatis ditutup ketika penerjemah keluar dengan blok pernyataan. Namun, dalam kasus di mana kita harus menutup koneksi secara manual, kita harus menggunakan berhenti Metode: itu memanggil menutup Metode secara internal, dan mengirimkan BERHENTI Perintah ke server untuk mencoba menutup koneksi dengan anggun.

Kesimpulan

Dalam artikel ini kami belajar cara menggunakan ular piton ftplib modul untuk terhubung ke server FTP dan berinteraksi dengannya. Kami melihat cara membuat contoh dari Ftp Kelas dan apa metode yang dapat kami gunakan untuk mencantumkan konten direktori jarak jauh dan mengunggah/mengunduh file. Kami juga melihat cara membuat, menghapus, mengganti nama, dan menghapus direktori atau file dan cara mengubah direktori kerja. Dalam tutorial ini kami menjelajahi kasus penggunaan yang paling umum, untuk daftar fitur lengkap, silakan kunjungi halaman Libftp resmi.

Tutorial Linux Terkait:

  • Tutorial LFTP di Linux dengan contoh
  • Daftar dan Instalasi Klien FTP di Ubuntu 20.04 Linux…
  • Daftar dan Instalasi Klien FTP di Ubuntu 22.04 Linux…
  • Cara Mengatur Server OpenVPN di Ubuntu 20.04
  • Ubuntu 20.04: Daftar klien torrent
  • Ubuntu 22.04: Daftar klien torrent
  • Mengatur server FTP di Linux
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Cara mengatur vsftpd di debian
  • Cara mengatur server ftp/sftp dan klien di almalinux