Python IOError:[Errno 13]权限被拒绝-ftplib

Python IOError:[Errno 13]权限被拒绝-ftplib,python,ftplib,Python,Ftplib,我正试图从ftp服务器下载文件,但遇到了“权限被拒绝”错误 Traceback (most recent call last): File "/Users/x34/Documents/Python/ftp_download.py", line 27, in <module> download() File "/Users/x34/Documents/Python/ftp_download.py", line 21, in download with o

我正试图从ftp服务器下载文件,但遇到了“权限被拒绝”错误

Traceback (most recent call last):
   File "/Users/x34/Documents/Python/ftp_download.py", line 27, in <module>
     download()
   File "/Users/x34/Documents/Python/ftp_download.py", line 21, in download
     with open(filename,'wb') as f:
IOError: [Errno 13] Permission denied: '/p012r018_5dt19900722_z20_30.tif.gz'
另一个音符。。。也许我看错了文件,但我不完全理解ftplib决定在哪里下载文件(默认下载目录?)。是否有其他模块更适合此应用程序

更新

我应该澄清,服务器上的文件名前面不包含“/”。我只是简单地补充了一下,因为它似乎有助于找到正确的文件位置和名称,因为以前的尝试以以下错误结束 ftplib.error\u perm:500未知命令

文件的完整路径为

 ftp.glcf.umd.edu/glcf/Landsat/WRS2/p012/r018/p012r018_5dx19900722.TM-GLS1990/p012r018_5dt19900722_z20_30.tif.gz'

它将您的文件保存在您要求它保存的位置,在带有open(filename,'wb')的
行中,作为f:
,您正在打开文件以保存收到的内容

而且,当文件名以
/
开头时,它会尝试保存到文件系统的根目录(
/
),在那里您似乎没有足够的权限

试试这个:

from ftplib import ftp    
ftp = FTP(r'ftp.glcf.umd.edu')
ftp.login()

directory = 'glcf/Landsat/WRS2/p012/r018/p012r018_5dx19900722.TM-GLS1990'
filename = '/p012r018_5dt19900722_z20_30.tif.gz'

ftp.cwd(directory)

with open(filename[1:],'wb') as f: # slices the string, "cutting" out the "/"
    ftp.retrbinary('RETR ' + filename,f.write)

ftp.close()
请注意,我们更改了要写入文件系统的文件名(行
,open(文件名[1:],'wb')为f:
)。如果您不知道切片操作符,请看一下这个


另外,您应该在代码中的
'RETR'
字符串的末尾加一个空格。它应该是
'RETR'+filename
而不是
'RETR'+filename
RETR somefile.txt
”是FTP服务器的一个命令,您正在执行“
RETR somefile.txt
”,用文件名破坏该命令。

您在两个地方使用了相同的文件名变量,我假定根“/”对FTP有效,但显然是本地权限问题


尝试在ftp命令中使用“/”,但在您打开的本地文件上不使用“/”

看起来您的脚本正试图将下载的内容保存到文件系统根(
/
)处的文件中。你在那里有足够的权限吗?它试图用原始文件名保存文件,前面有一个
/
,因此在
/
处创建了文件。在前面添加/的主要原因是,它似乎是向前迈出了一步,因为在它给我另一个错误之前,这是回溯的最后一部分-->“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.py”,第219行,在getresp raise error\u perm,resp ftplib.error\u perm:500未知命令中。请尝试在代码中的“REPR”之后添加空格字符。我已更新了答案中的代码。您正在将“REPR”与文件名串联,但正确的是:“REPR file.txt”“我在我的电脑和mac电脑上都尝试了你的建议,但没有效果,因为它给我的错误是“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.py”,第219行,在getresp raise error\u perm中,resp ftplib.error\u perm:500未知命令------如果有人想尝试,ftp站点对公众是免费的,如果它只是我的计算机?在用“RETR”结尾的空格更正代码后,我在服务器上得到一个权限错误。
from ftplib import ftp    
ftp = FTP(r'ftp.glcf.umd.edu')
ftp.login()

directory = 'glcf/Landsat/WRS2/p012/r018/p012r018_5dx19900722.TM-GLS1990'
filename = '/p012r018_5dt19900722_z20_30.tif.gz'

ftp.cwd(directory)

with open(filename[1:],'wb') as f: # slices the string, "cutting" out the "/"
    ftp.retrbinary('RETR ' + filename,f.write)

ftp.close()