【问题标题】:"Permission denied" error from downloading all files from FTP folder从 FTP 文件夹下载所有文件时出现“权限被拒绝”错误
【发布时间】:2017-03-17 14:20:21
【问题描述】:

到目前为止,我已经从 FTP 站点获得了我需要的文件的名称。请参阅下面的代码。

from ftplib import FTP
import os, sys, os.path

def handleDownload(block):
     file.write(block)

ddir='U:/Test Folder'
os.chdir(ddir)
ftp = FTP('sidads.colorado.edu')
ftp.login()

print ('Logging in.')
directory = '/pub/DATASETS/NOAA/G02158/unmasked/2012/04_Apr/'

print ('Changing to ' + directory)
ftp.cwd(directory)
ftp.retrlines('LIST')

print ('Accessing files')

filenames = ftp.nlst() # get filenames within the directory
print (filenames)

我遇到麻烦的地方是将文件下载到文件夹中。下面的代码是我尝试过的,但是由于在写入文件之前没有创建文件,我收到了权限错误。

for filename in filenames:
     local_filename = os.path.join('C:/ArcGis/New folder', filename)
     file = open(local_filename, 'wb')
     ftp.retrbinary('RETR '+ filename, file.write)
     file.close()

ftp.quit()

这是错误和回调。

【问题讨论】:

  • 请提供确切的错误信息,包括调用堆栈! + C:/ArcGis/New folder 文件夹是否存在?
  • 是的,该文件夹存在,我将在编辑中包含错误。

标签: python python-2.7 download ftp ftplib


【解决方案1】:

目录列表包括对文件夹的. 引用。

你必须跳过它,你不能下载它。

for filename in filenames:
    if filename != '.':
        local_filename = os.path.join('C:/ArcGis/New folder', filename)
        file = open(local_filename, 'wb')
        ftp.retrbinary('RETR '+ filename, file.write)
        file.close()

实际上你必须跳过列表中的所有文件夹。

【讨论】:

  • 所以我用这种方法不能下载文件?
  • 当然可以。但该列表还包含目录条目,您必须跳过这些! - 我添加了一些示例(它可能不正确,因为我不使用 Python,但它应该给你的想法)
猜你喜欢
  • 1970-01-01
  • 2021-02-17
  • 2023-01-11
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多