از 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()
این متد دو ورودی میگیرد:
- ورودی اول دستوری است که باید اجرا شود. در اینجا
STOR name.format
برای ذخیره کردن فایلی است که قرار است آپلود کنیم. نام فایل در این دستور میتواند با نام فایل در کامپیوتر شخصیمان متفاوت باشد. - ورودی دوم هم محتوای باینری فایل مورد نظر است.
اگر دوست دارید در کار با فایلها (از جمله تابع 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 منتقل کنید تا مطمئن شوید روند آن را یاد گرفتهاید! 🙂 اگر تجربه یا مشکلی در این زمینه دارید، بخش دیدگاهها برای شماست.
همچنین برای بررسی متدهای بیشتر یا آخرین بهروزرسانیهای این کتابخانه، میتوانید به مستندات آن مراجعه کنید.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام ایا میشه با این کتابخونه سرور ftp ساخت؟
سلام
تجربهای در این مورد ندارم. یک جستجو کردم پیشنهاد شده بود از کتابخونه pyftpdlib برای ساخت سرور استفاده کنید.
تشکر
سلام
من انجام دادم یه مشکلی دارم وقتی میخوام فایلو اپلود کنم با مشکل
مواجه میشم خیلی دقت دنبال یک اموزش در این موضوع هستم
سلام
این خطای اجرا مربوط به اینه که کانکشن ftp به درستی با سرور برقرار نشده. دلیلش رو عدم پاسخگویی سرور (respond timeout) گفته. پیشنهاد میکنیم اتصال به ftp رو با نرمافزارها یا ابزارهایی غیر از داخل کد پایتون تست کنید.
سلام من اینکار و کردم فایل و ارسال نمیکنه
اگر با نرمافزاهای ftp هم امکان انتقال فایل رو ندارید پس سرور ftp مشکل داره. این خطایی هم که فرستادید مربوط به عدم جواب دادن سرور به درخواستی که بهش دادید هست. از هاستینگ یا مدیر سرورتون دلیل مشکل رو جویا بشید.
ممنون
ERROR: Could not find a version that satisfies the requirement ftplib (from versions: none)
ERROR: No matching distribution found for ftplib
این ارور رو بهم میده هنگام دانلود تو cmd توی لیست هم از قبل نصب نبود چک کردم
لطفا راهنماییم کنید
دارید سعی میکنید با pip کتابخونه رو نصب کنید؟
این خطا معمولاً به تداخل در سیستم عامل یا سختافزار سیستم با کتابخونه هست. مدل پردازنده و مادربورد رو با ftplib سرچ کنید ببینید قبلا بحثی در مورد تداخلش شده یا نه.
اول صفحه اونجا که دامین رو میزنی اشتباه تایپی داره
FFTP نوشتید ، دوتا F گزاشتید
درسته! اشتباه تایپی بود. ممنون که اطلاع دادی محمد عزیز
سلام من خیلی ممنونم که کمکم کردید بالاخره بعد مدتی از درگیری ذهنم کم شد واقعا ممنونم کارتون عالی بود فایل انتقال پیدا کرد تشکر فراوان
خوشحالم که موفق شدید. توی هر کاری از جمله برنامهنویسی اگه پیگیر باشین به نتایج خیلی خوبی میرسید.
سلام من واقعا عذر میخوام نمیخواستم مزاحم بشم ولی من از اون موقع حقیقتش نتونستم با این کد متصل بشم الان که این مقاله رو گذاشتین گفتم مشکلم رو بگم پایتون 3.8 کار میکنم اگه میشه
Domin = test001.xspace.ir و
User = yasxs_28988337 و
Pass = ***** و
ادرسش هم ftpupload.net هست اگر امکانش هست و زحمتی نیست شما یه تست بکنید ببینید روش چه کدی جواب میده من واقعا حرفه ای نیستم و باز هم اگر اشکالی نداشت و زحمتی نبود کد رو بگین من واقعا خیلی وقته درگیرشم حداقل بدونم مشکل از هاستمه یا پایتون 2 باید کار کنم چیکار کنم ممنونم خسته نباشید فعلا
سلام
اتفاقاً چون شما پیگیری کردید، احساس نیاز کردم که یه آموزش براش آماده کنم! 🙂
من فایل test.jpeg رو داخل هاست شما آپلود کردم. با کد زیر:
بررسی کنید، اگر جاییش مشکلی دارید بپرسید تا توضیح بدم چیکار شده. موفق باشید.