آموزش کار با FTP در پایتون با ftplib

از ftp برای انتقال فایل‌های حجیم یا با سطح امینت معمولی به سرور و هاست استفاده می‌شود. در این آموزش نحوه کار با FTP در پایتون را یاد می‌گیریم. برای این کار از کتابخانه ftplib استفاده می‌کنیم. با اتصال ftp می‌توانیم فایل متنی، عکس، فیلم، فایل فشرده یا هر چیز دیگری را به سرور منتقل کنیم.

کتابخانه ftplib به طور پیش‌فرض با نصب پایتون در کتابخانه‌های آن قرار می‌گیرد. اما اگر آن را ندارید می‌توانید با pip نصبش کنید.

FTP در پایتون‌

فرآیند کلی در یک ارتباط ftp به این صورت است که ابتدا باید به سرور مورد نظر وصل شویم. سپس به مسیر (فولدر) مورد نظرمان رفته و عملیات آپلود یا دانلود فایل را انجام دهیم. در انتها هم بهتر است اتصال برقرار شده را قطع کنیم.

در همین ابتدا، کتابخانه ftplib را به برنامه اضافه می‌کنیم.

import ftplib

در این کتابخانه تابعی به نام FTP() داریم که یک شی (object) برای ارتباط ftp ما ایجاد می‌کند. کافی است دامنه سایت یا ip سرور را به شکل string در پایتون به عنوان ورودی بدهیم.

ftp = ftplib.FTP("domain.com")

با این دستور ارتباط اولیه ما با سرور برقرار می‌شود. حالا باید نام کاربری و رمز عبور ftp را برای پایتون مشخص کنیم تا احراز هویت انجام شود.

برای ورود از متد login() روی شی ftp استفاده می‌کنیم. دو ورودی اول این متد به ترتیب نام کاربری و رمز عبور اکانت است.

ftp.login("testuser", "mypassword")

اگر مشکلی در اعتبارسنجی اکانت پیش نیاید، پیام خوش‌آمدگویی سرور در خروجی این تابع داده می‌شود. اگر اطلاعات اشتباه بود یا پاسخی از سمت سرور دریافت نشد، یک خطا ایجاد شده و برنامه متوقف می‌شود.

برای مدیریت خطاهای ناخواسته می‌توانید از try except که در مدیریت خطای پایتون آموزش داده شده است استفاده کنید.

پس از ورود موفق، در مسیر root که کاربری ما دسترسی دارد قرار داریم. برای حرکت در فولدرها از توابعی که در بخش متدهای جانبی بررسی می‌کنیم کمک می‌گیریم.

آپلود فایل با STOR

یک عکس به نام sabzdanesh.jpg در کنار برنامه (کدهای فعلی) داریم. می‌خواهیم آن را با ftp در پایتون به هاست منتقل کنیم.

ابتدا باید فایل را در حالت باینری باز کنیم. سپس با متد storbinary() آن را به هاست منتقل کنیم. به کد زیر توجه کنید:

f = open("sabzdanesh.jpg", "rb")
ftp.storbinary("STOR sabzdanesh.jpg", f)
f.close()

این متد دو ورودی می‌گیرد:

  1. ورودی اول دستوری است که باید اجرا شود. در اینجا STOR name.format برای ذخیره کردن فایلی است که قرار است آپلود کنیم. نام فایل در این دستور می‌تواند با نام فایل در کامپیوتر شخصی‌مان متفاوت باشد.
  2. ورودی دوم هم محتوای باینری فایل مورد نظر است.

اگر دوست دارید در کار با فایل‌ها (از جمله تابع open()) حرفه‌ای شوید، می‌توانید آموزش زیر را دنبال کنید:

کار با فایل در پایتون

کار با فایل در پایتون

دانلود فایل با ftp در پایتون

برای انتقال فایل از ftp به سیستمی که برنامه در آن در حال اجراست، از متد retrbinary() استفاده می‌کنیم.

فرض کنید قرار است فایل sbzd.jpg را از هاست دانلود کرده و با نام sabzdanesh.jpg ذخیره کنیم. برای این کار از قطعه کد زیر استفاده می‌کنیم:

f = open("sabzdanesh.jpg", "wb")
ftp.retrbinary("RETR sbzd.jpg", f.write)
f.close()

فایل را در حالت wb باز کرده و از دستور RETR name.format برای انتقال از هاست استفاده می‌کنیم.

این متد ورودی سومی هم می‌گیرد. این عدد مشخص می‌کند که قطعه‌های انتقال فایل (در سوکت‌نویسی پایتون) چقدر باشد. اگر محدودیتی در سرور ندارید، بدون تعریف این آرگومان، از مقدار پیش‌فرض استفاده کنید.

متدهای بیشتر FTP

شئ ftp متدهای دیگری هم دارد که برخی از آن‌ها برایمان کاربردی خواهد بود. برای مثال، معمولاً بعد از برقراری اتصال نیاز داریم به مسیر فولدر مورد نظر خود برویم. چند مورد از این توابع در جدول زیر آورده شده‌اند:

متدنتیجه
ftp.cwd('/files/test/')برای رفتن به فولدر مورد نظر
ftp.mkd('/newfolder/')ایجاد فولدر جدید با ftp
ftp.pwd()path فعلی
ftp.delete('test.png')حذف فایل test.png

در پایان کارتان با FTP حتماً ارتباطی که برقرار کرده بودید را با متد quit() ببندید؛ مثل کد زیر:

ftp.quit()

کد اتصال به ftp با پایتون‌

در بخش پایانی آموزش، یک جمع‌بندی روی کدهایی که با آن‌ها آشنا شدیم داریم. اکنون می‌خواهیم یک فایل را با ftp پایتون به هاست منتقل کنیم.

این کد نسبت به کدهای بالا، دو تفاوت جزئی دارد:

  • به جای وارد کردن کل کتابخانه ftplib فقط تابع FTP را در برنامه وارد کرده‌ایم.
  • برای ورود و احراز هویت، به جای login() از همان تابع FTP() استفاده شده است.
from ftplib import FTP

ftp = FTP("domain", "user", "pass")
f = open("sabzdanesh.png", "rb")

ftp.cwd("/files/new/")
ftp.storbinary("STOR sabzdanesh.png", f)

f.close()
ftp.quit()

امیدوارم با این آموزش نحوه کار با ftp در پایتون را به خوبی متوجه شده باشید. همین الآن یک فایل را با ftp منتقل کنید تا مطمئن شوید روند آن را یاد گرفته‌اید! 🙂 اگر تجربه یا مشکلی در این زمینه دارید، بخش دیدگاه‌ها برای شماست.

همچنین برای بررسی متدهای بیشتر یا آخرین به‌روزرسانی‌های این کتابخانه، می‌توانید به مستندات آن مراجعه کنید.