簡體   English   中英

FTP上傳文件Python

[英]FTP upload files Python

我正在嘗試將文件從 Windows 服務器上傳到 unix 服務器(基本上是嘗試執行 FTP)。 我使用了下面的代碼

#!/usr/bin/python
import ftplib
import os
filename = "MyFile.py"
ftp = ftplib.FTP("xx.xx.xx.xx")
ftp.login("UID", "PSW")
ftp.cwd("/Unix/Folder/where/I/want/to/put/file")
os.chdir(r"\\windows\folder\which\has\file")
ftp.storbinary('RETR %s' % filename, open(filename, 'w').write)

我收到以下錯誤:

Traceback (most recent call last):
  File "Windows\folder\which\has\file\MyFile.py", line 11, in <module>
    ftp.storbinary('RETR %s' % filename, open(filename, 'w').write)
  File "windows\folder\Python\lib\ftplib.py", line 466, in storbinary
    buf = fp.read(blocksize)
AttributeError: 'builtin_function_or_method' object has no attribute 'read'

MyFile.py所有內容MyFile.py被刪除。

誰能告訴我出了什么問題。我讀過 ftp.storbinary 用於使用 FTP 上傳文件。

如果您嘗試存儲非二進制文件(如文本文件),請嘗試將其設置為讀取模式而不是寫入模式。

ftp.storlines("STOR " + filename, open(filename, 'rb'))

對於二進制文件(任何無法在文本編輯器中打開的文件)以讀取二進制模式打開文件

ftp.storbinary("STOR " + filename, open(filename, 'rb'))

另外,如果您打算使用 ftp lib,您可能應該閱讀教程,我會推薦 effbot 的這篇文章

結合這兩個建議。 最終答案是

#!/usr/bin/python
import ftplib
import os
filename = "MyFile.py"
ftp = ftplib.FTP("xx.xx.xx.xx")
ftp.login("UID", "PSW")
ftp.cwd("/Unix/Folder/where/I/want/to/put/file")
os.chdir(r"\\windows\folder\which\has\file")
myfile = open(filename, 'r')
ftp.storlines('STOR ' + filename, myfile)
myfile.close()

嘗試使文件成為對象,以便您可以在操作結束時關閉它。

myfile = open(filename, 'w')
ftp.storbinary('RETR %s' % filename, myfile.write)

並在傳輸結束時

 myfile.close()

這可能無法解決問題,但可能會有所幫助。

ftplib支持使用上下文管理器,因此您可以使其更簡單

    with ftplib.FTP('ftp_address', 'user', 'pwd') as ftp, open(file_path, 'rb') as file:
        ftp.storbinary(f'STOR {file_path.name}', file)
        ...

通過這種方式,您無需插入 try/except/finally 塊即可應對文件和 ftp 問題。 好吧,它是pythonic。

PS:因為它使用 f-strings 只是 python >= 3.6 但可以很容易地修改為使用舊的 .format() 語法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM