<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Python FTP 教程 > 原文: [http://zetcode.com/python/ftp/](http://zetcode.com/python/ftp/) Python FTP 編程教程展示了如何使用`ftplib`庫在 Python 中使用 FTP。 我們將連接到 FTP 服務器,列出目錄,下載和上傳文件。 ## FTP 文件傳輸協議(FTP)是用于在計算機網絡上的客戶端和服務器之間傳輸計算機文件的標準網絡協議。 客戶端和服務器使用一組 FTP 命令進行通信,例如 DELE,RETR 或 CWD。 許多服務器為 FTP 服務提供匿名 FTP 訪問。 例如,有些 Linux 托管站點提供了一個匿名 FTP 帳戶來下載分發映像。 ## Python `ftplib` Python `ftplib`是實現 FTP 協議客戶端的模塊。 它包含一個 FTP 客戶端類和一些幫助程序功能。 ## Python `FTP`類 `ftplib.FTP()`創建 FTP 類的新實例。 給定主機后,將使用`connect()`方法建立與主機的連接。 ## 上下文管理器 與 Python 3 不同,Python 2 沒有使用 FTP 類實現的上下文管理器。 因此,在處理連接對象時,Python 2 代碼需要稍微不同的方法。 ```py import ftplib with ftplib.FTP('ftp.debian.org') as ftp: ``` `with`命令將自動關閉與 Python 3 代碼的服務器連接。 ```py import ftplib from contextlib import closing with closing(ftplib.FTP('ftp.zetcode.com')) as ftp: ``` 對于 Python 2 代碼,我們需要使用`contextlib`模塊的`closing`方法。 ## 歡迎消息 `getwelcome()`返回服務器為響應初始連接而發送的歡迎消息。 該消息可能包含一些對用戶有用的信息。 `welcome.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.debian.org') as ftp: print(ftp.getwelcome()) ``` 該示例創建與 Debian FTP 服務器的連接,該服務器具有一個匿名帳戶并返回其歡迎消息。 ```py $ ./welcome.py 220 ftp.debian.org FTP server ``` 這是程序的輸出。 ## 目錄列表 `dir()`方法產生一個目錄列表。 `listing.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.debian.org') as ftp: try: ftp.login() files = [] ftp.dir(files.append) print(files) except ftplib.all_errors as e: print('FTP error:', e) ``` 該示例連接到`ftp.debian.org`主機,并檢索初始登錄目錄的目錄列表。 ```py try: ftp.login() ``` 當`login()`方法沒有參數時; 我們連接到 FTP 站點的匿名帳戶。 ```py files = [] ftp.dir(files.append) ``` `dir()`方法產生目錄列表,并將數據添加到列表中。 ```py $ ./listing.py ['drwxr-xr-x 9 1176 1176 4096 Sep 26 15:07 debian'] ``` 這是輸出。 ## FTP 命令 FTP 客戶端將命令發送到 FTP 服務器,例如`PWD`或`RETR`。 `ftplib`包含幾種包裝這些命令的方法。 使用`sendcmd()`或`voidcmd()`方法發送命令。 `ftp_commands.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.debian.org') as ftp: try: ftp.login() wdir = ftp.sendcmd('PWD') print(ftplib.parse257(wdir)) wdir2 = ftp.pwd() print(wdir2) except ftplib.all_errors as e: print('FTP error:', e) ``` 該示例通過直接發送`PWD`命令并使用`pwd()`方法來檢索當前工作目錄。 ```py wdir = ftp.sendcmd('PWD') ``` 我們使用`sendcmd()`方法發送`PWD`命令。 ```py print(ftplib.parse257(wdir)) ``` `parse257()`是一個幫助程序方法,它從返回的字符串中檢索目錄,該字符串還包含狀態代碼。 ```py wdir2 = ftp.pwd() print(wdir2) ``` 在這里,我們使用`pwd()`方法檢索當前工作目錄。 ```py $ ./ftp_commands.py / / ``` 這是輸出。 ## 變更目錄 `cwd()`方法更改當前工作目錄。 `change_directory.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.debian.org') as ftp: try: ftp.login() wdir = ftp.pwd() print(wdir) ftp.cwd('debian') wdir2 = ftp.pwd() print(wdir2) except ftplib.all_errors as e: print('FTP error:', e) ``` 該示例使用`cmd()`方法更改為`debian`文件夾。 ```py $ ./change_directory.py / /debian ``` 這是輸出。 ## 創建目錄 使用`mkd()`方法創建目錄。 此操作需要具有足夠特權的用戶帳戶; 它不適用于匿名帳戶。 `create_directory.py` ```py #!/usr/bin/python3 import ftplib from contextlib import closing with closing(ftplib.FTP('ftp.example.com')) as ftp: try: ftp.login('user7', 's$cret') ftp.mkd('newdir') files = [] ftp.retrlines('LIST', files.append) for fl in files: print(fl) except ftplib.all_errors as e: print('FTP error:', e) ``` 該示例連接到 FTP 服務器,并在登錄文件夾中創建一個新目錄。 ```py ftp.login('user7', 's$cret') ``` 我們使用`login()`方法登錄。 ```py ftp.mkd('newdir') ``` 使用`mkd()`方法創建一個新目錄。 ```py files = [] ftp.retrlines('LIST', files.append) ``` 使用`LIST` FTP 命令,我們檢索文件列表和有關這些文件的信息。 該列表存儲在`files`列表中。 ```py $ ./create_directory.py drwx------ 6 zetcode.com 117992 7 Sep 27 14:58 . drwx------ 6 zetcode.com 117992 7 Sep 27 14:58 .. -rw------- 1 zetcode.com 117992 151 Jul 31 2015 .htaccess drwxr-xr-x 2 0 0 4096 Sep 27 01:16 logs drwx---r-x 2 zetcode.com 117992 2 Sep 27 14:58 newdir drwx------ 3 zetcode.com 117992 3 Mar 11 2011 sub drwx------ 26 zetcode.com 117992 31 Sep 25 15:32 web ``` 從輸出中我們可以看到`newdir`已創建。 ## 獲取文本文件的大小 `SIZE`命令及其等效的`size()`方法是確定文件大小的非標準方法。 盡管沒有標準化,但是它由許多服務器實現。 `text_file_size.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.debian.org') as ftp: try: ftp.login() size = ftp.size('debian/README') print(size) except ftplib.all_errors as e: print('FTP error:', e) ``` 該示例使用`size()`方法檢索`README`文件的大小。 ## 獲取二進制文件的大小 要確定二進制文件的大小,我們必須切換到二進制模式。 `binary_file_size.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.debian.org') as ftp: try: ftp.login() # TYPE A for ASCII mode ftp.sendcmd('TYPE I') size = ftp.size('debian/ls-lR.gz') print(size) except ftplib.all_errors as e: print('FTP error:', e) ``` 該示例確定二進制文件的大小。 ```py ftp.sendcmd('TYPE I') ``` 我們使用`TYPE I`命令進入二進制模式。 ```py size = ftp.size('debian/ls-lR.gz') ``` 我們得到一個二進制文件的大小。 ## 下載文本文件 要下載文本文件,我們使用`RETR` FTP 命令。 `download_text_file.py` ```py #!/usr/bin/python3 import ftplib import os with ftplib.FTP('ftp.debian.org') as ftp: file_orig = '/debian/README' file_copy = 'README' try: ftp.login() with open(file_copy, 'w') as fp: res = ftp.retrlines('RETR ' + file_orig, fp.write) if not res.startswith('226 Transfer complete'): print('Download failed') if os.path.isfile(file_copy): os.remove(file_copy) except ftplib.all_errors as e: print('FTP error:', e) if os.path.isfile(file_copy): os.remove(file_copy) ``` 該示例從`ftp.debian.org`服務器下載文本文件。 ```py with open(file_copy, 'w') as fp: res = ftp.retrlines('RETR ' + file_orig, fp.write) ``` 我們獲取文件并寫入本地副本文件。 ```py if not res.startswith('226 Transfer complete'): print('Download failed') if os.path.isfile(file_copy): os.remove(file_copy) ``` 如果下載失敗,我們會打印一條錯誤消息并刪除本地文件。 ## 上傳文本文件 具有`storlines()`方法的`STOR`命令用于上傳文本文件。 `upload_text_file.py` ```py #!/usr/bin/python3 import ftplib with ftplib.FTP('ftp.example.com') as ftp: filename = 'README' try: ftp.login('user7', 's$cret') with open(filename, 'rb') as fp: res = ftp.storlines("STOR " + filename, fp) if not res.startswith('226 Transfer complete'): print('Upload failed') except ftplib.all_errors as e: print('FTP error:', e) ``` 在此示例中,我們將文本文件上傳到 FTP 服務器。 在本教程中,我們使用了 Python `ftplib`。 您可能也對以下相關教程感興趣: [Python 教程](/lang/python/), [Python 集教程](/python/set/), [Python lambda 函數](/python/lambda/), [Python 列表推導](/articles/pythonlistcomprehensions/), [Python 映射教程](/python/map/), [OpenPyXL 教程](/articles/openpyxl/), [Python Requests 教程](/web/pythonrequests/)和 [Python CSV 教程](/python/csv/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看