Cara Terhubung ke Server FTP Menggunakan Python
- 3486
- 41
- Ricardo Gottlieb
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
Persyaratan dan konvensi perangkat lunak yang digunakan
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
), danmenulis
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
- « Ubuntu 20.10 Unduh
- Bagaimana memperbaiki firefox sudah berjalan tetapi tidak menanggapi pesan kesalahan »