ftplib मॉड्यूल में FTP क्लास FTP प्रोटोकॉल के क्लाइंट साइड को कार्यान्वित करती है, जिससे फाइल ट्रांसफर, डायरेक्टरी नेविगेशन, और रिमोट फाइल मैनेजमेंट संभव होता है।
कनेक्शन स्थापित करना
from ftplib import FTP
# तरीका 1: कंस्ट्रक्टर में होस्टनाम
ftp = FTP('ftp.example.com')
# तरीका 2: अलग से कनेक्ट
ftp = FTP()
ftp.connect('ftp.example.com', 21) # डिफ़ॉल्ट पोर्ट 21
# लॉगिन (अनाम डिफ़ॉल्ट)
ftp.login() # anonymous login
ftp.login('username', 'password') # क्रेडेंशियल्स के साथ
मुख्य मेथड्स
| मेथड | विवरण |
|---|---|
connect(host, port) | सर्वर से कनेक्ट |
getwelcome() | वेलकम मैसेज प्राप्त करें |
login(user, passwd, acct) | लॉगिन करें |
abort() | चल रहे ट्रांसफर को अबॉर्ट करें |
retrbinary(cmd, callback, blocksize, rest) | बाइनरी मोड में फाइल डाउनलोड |
storbinary(cmd, fp, blocksize, callback, rest) | बाइनरी मोड में फाइल अपलोड |
dir(pathname) | डायरेक्टरी लिस्टिंग प्रिंट करें |
nlst(pathname) | फाइल नामों की सूची लौटाएं |
delete(filename) | फाइल डिलीट करें |
cwd(pathname) | करंट डायरेक्टरी बदलें |
mkd(pathname) | नई डायरेक्टरी बनाएं |
pwd() | करंट डायरेक्टरी पथ प्राप्त करें |
rmd(dirname) | डायरेक्टरी हटाएं |
size(filename) | फाइल साइज़ प्राप्त करें |
quit() | कनेक्शन बंद करें |
उदाहरण: फाइल डाउनलोड और अपलोड
from ftplib import FTP
import os
def download_file(ftp, remote_filename, local_filename):
"""बाइनरी मोड में फाइल डाउनलोड"""
with open(local_filename, 'wb') as local_file:
ftp.retrbinary(f'RETR {remote_filename}', local_file.write)
print(f"डाउनलोड पूरा: {local_filename}")
def upload_file(ftp, local_filename, remote_filename):
"""बाइनरी मोड में फाइल अपलोड"""
with open(local_filename, 'rb') as local_file:
ftp.storbinary(f'STOR {remote_filename}', local_file)
print(f"अपलोड पूरा: {remote_filename}")
# उपयोग
with FTP("ftp.example.com") as ftp:
ftp.login("username", "password")
print(ftp.getwelcome())
# डायरेक्टरी लिस्टिंग
ftp.dir()
# फाइल डाउनलोड
download_file(ftp, 'README.txt', 'local_README.txt')
# फाइल अपलोड
upload_file(ftp, '/home/user/document.pdf', 'document.pdf')
# डायरेक्टरी नेविगेशन
ftp.cwd('/public_html')
print(f"करंट डायरेक्टरी: {ftp.pwd()}")
# फाइल साइज़
size = ftp.size('index.html')
print(f"index.html साइज़: {size} बाइट्स")
# फाइल डिलीट
# ftp.delete('old_file.txt')
# नई डायरेक्टरी
# ftp.mkd('new_folder')
# कनेक्शन ऑटोमेटिकली बंद होता है (context manager)
उन्नत: रिकर्सिव डायरेक्टरी लिस्टिंग
def list_all_files(ftp, path='.'):
"""सभी फाइल्स रिकर्सिवली लिस्ट करें"""
original_cwd = ftp.pwd()
try:
ftp.cwd(path)
files = []
dirs = []
# nlst से नाम प्राप्त करें
try:
names = ftp.nlst()
except:
names = []
for name in names:
if name in ('.', '..'):
continue
try:
# डायरेक्टरी है या नहीं चेक करें
ftp.cwd(name)
ftp.cwd('..')
dirs.append(name)
except:
files.append(name)
print(f"डायरेक्टरी: {path}")
for f in files:
print(f" फाइल: {f}")
for d in dirs:
list_all_files(ftp, d)
finally:
ftp.cwd(original_cwd)
# उपयोग
with FTP("ftp.example.com") as ftp:
ftp.login("user", "pass")
list_all_files(ftp)
सुरक्षा: FTP_TLS (FTPS)
from ftplib import FTP_TLS
# SSL/TLS के साथ सुरक्षित FTP
ftps = FTP_TLS('ftps.example.com')
ftps.login('user', 'pass')
ftps.prot_p() # डेटा कनेक्शन भी एन्क्रिप्ट करें
# बाकी ऑपरेशन्स समान
ftps.dir()
ftps.quit()
सामान्य समस्याएं और समाधान
- पैसिव मोड: फायरवॉल/NAT के पीछे
ftp.set_pasv(True)सेट करें - टाइमआउट:
FTP(host, timeout=30)सेट करें - एन्कोडिंग:
ftp.encoding = 'utf-8'सेट करें (पायथन 3.9+) - बड़ी फाइल्स:
restपैरामीटर से रिज्यूम सपोर्ट
चेतावनी: FTP असुरक्षित प्रोटोकॉल है (क्रेडेंशियल्स प्लेनटेक्स्ट में)। प्रोडक्शन में SFTP (SSH File Transfer Protocol) या FTPS उपयोग करें।paramikoयाpysftpलाइब्रेरीज SFTP के लिए बेहतर हैं।