我试图在python3上使用ftplib上传.csv文件。 我的代码如下所示:
from ftplib import FTP_TLS
import os, sys
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
script_path = get_script_path()
ftp = FTP_TLS(host='hostedftp.com')
ftp.login('USER','123456789')
ftp.prot_p()
filename = script_path + '/Test.csv'
fp = open(filename, 'r')
ftp.storlines("STOR " + filename, fp)
ftp.close()
我得到了:
文件“ftp_test.py”,第15行,in ftp.storlines(“STOR”+ filename,fp)...文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ftplib.py”, 第208行,在getline中 提出EOFError EOFError
知道为什么吗?
答案 0 :(得分:0)
我建议您切换到使用二进制模式。这还涉及使用rb
打开文件。例如:
from ftplib import FTP_TLS
import os, sys
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
script_path = get_script_path()
ftp = FTP_TLS(host='hostedftp.com')
ftp.login('USER','123456789')
ftp.prot_p()
filename = 'Test.csv'
with open(os.path.join(get_script_path(), filename), 'rb') as fp:
try:
ftp.storbinary("STOR " + filename, fp)
ftp.quit() # This can raise EOFError if the connection has closed
except EOFError:
pass
ftp.close()
如果文件上传正常,您还可以捕获EOFError
,如果连接已关闭,则会引发该问题。
答案 1 :(得分:0)
问题是我在STOR命令上使用了完整路径。 这是固定代码:
from ftplib import FTP_TLS
import os, sys
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
script_path = get_script_path()
ftp = FTP_TLS(host='hostedftp.com')
ftp.login('USER','123456789')
ftp.prot_p()
filename_path = script_path + '/Test.csv'
filename = 'Test.csv'
fp = open(filename_path, 'rb')
ftp.storbinary("STOR " + filename, fp)
fp.close()
ftp.quit()
请注意我如何使用filename_path
打开它并获取fp
,但实际是STOR命令的filename
。