TypeError:需要 str、bytes 或 os.PathLike 对象,而不是 _io.BufferedReader

问题描述 投票:0回答:2

我正在尝试迭代本地计算机上文件夹中的一组文件,并使用此代码(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

有什么建议吗?

python ftplib
2个回答
24
投票

我认为这与

storbinary
中的第二个元素有关。您正在尝试打开
file
,但它已经是指向您在第
file = open(local_path,'rb')
行中打开的文件的指针。所以,尝试使用
ftp.storbinary("STOR " + i, file)


0
投票

仅适用于来自 Django 框架平台的人

如果您的 MEDIA_ROOT 已配置为列表。确保删除列表对象以公开路径,如下所示

# MEDIA_ROOT = [os.path.join(BASE_DIR, 'media')]

更改为

   MEDIA_ROOT= os.path.join(BASE_DIR, 'media')
© www.soinside.com 2019 - 2024. All rights reserved.