我正在尝试迭代本地计算机上文件夹中的一组文件,并使用此代码(Python 3.6.1 32 位、Windows 10 64 位)仅将文件名包含“Service_Areas”的文件上传到我的 FTP 站点):
ftp = FTP('ftp.ftpsite.org')
username = ('username')
password = ('password')
ftp.login(username,password)
ftp.cwd(username.upper())
ftp.cwd('2017_05_02')
for i in os.listdir('C:\FTP_testing'):
if i.startswith("Service_Area"):
local_path = os.path.join('C:\FTP_testing',i)
file = open(local_path,'rb')
ftp.storbinary("STOR " + i, open(file, 'rb'))
file.close()
continue
else:
print('nope')
ftp.quit()
但我收到此错误:
Traceback (most recent call last):
File "C:\Users\user\Desktop\Test1.py", line 32, in <module>
ftp.storbinary("STOR " + str(i), open(file, 'rb'))
TypeError: expected str, bytes or os.PathLike object, not _io.BufferedReader
有什么建议吗?
该错误信息表明
ftp.storbinary()
的第二个参数需要是一个字符串、字节或类似 os.PathLike 的对象,但你提供的是一个
_io.BufferedReader
对象。这是因为你调用了
open(file, 'rb')
,它返回一个文件对象,而你已经打开了
file
。
你可以通过将
open(file, 'rb')
替换为
file
来轻松解决此问题,如下所示:
ftp.storbinary("STOR " + i, file)
以下是已更正代码:
ftp = FTP('ftp.ftpsite.org')
username = ('username')
password = ('password')
ftp.login(username,password)
ftp.cwd(username.upper())
ftp.cwd('2017_05_02')
for i in os.listdir('C:\FTP_testing'):
if i.startswith("Service_Area"):
local_path = os.path.join('C:\FTP_testing',i)
file = open(local_path,'rb')
ftp.storbinary("STOR " + i, file) # 此处已更正
file.close()
continue
else:
print('nope')
ftp.quit()
此更改将文件对象直接传递给
ftp.storbinary()
函数,从而避免了错误。