EOFError - 使用ftplib上传.csv文件

时间:2018-06-18 17:41:02

标签: python python-3.x csv ftplib

我试图在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

知道为什么吗?

2 个答案:

答案 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