【问题标题】:Iterate through folders and subfolders to get to the files in each directory FTP Python [duplicate]遍历文件夹和子文件夹以获取每个目录中的文件 FTP Python [重复]
【发布时间】:2017-04-03 20:09:11
【问题描述】:

下面我在代码中包含了我当前的尝试,其中列出了整个文件夹、运行文件并下载它们。但是,此方法不支持遍历子文件夹和文件夹。

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

ddir='U:/Test Folder'
filedestination = 'U:/SWEModelConstruction/UnmaskedData'
t1= []
t2= []
t3= []
os.chdir(ddir)
ftp = FTP('sidads.colorado.edu')
ftp.login()

print ('Logging in.')

directory = '/pub/DATASETS/NOAA/G02158/unmasked/'

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:
    if filename not in ['.', '..']:
        #Parse values from filename to use in os.path.join
        for fname in filenames:
            t1 = fname[16:20]
            t2 = fname[20:22]
            t3 = fname[22:24]
            t4 = fname[16:24]

            if not t1: continue
        #use parsed values from filenamee to create folder and file pathss
        local_folder = os.path.join(filedestination, t1,t2,t3)
        local_filename = os.path.join(filedestination, t1,t2,t3,filename)
        local_dat = os.path.join(filedestination, t1,t2,t3,'zz_ssmv11034tS__T0001TTNATS'+t4+'05HP001.dat.gz')
        local_hdr = os.path.join(filedestination, t1,t2,t3,'zz_ssmv11034tS__T0001TTNATS'+t4+'05HP001.Hdr.gz')
        hdrfile = ('zz_ssmv11034tS__T0001TTNATS'+t4+'05HP001.Hdr')
        print (local_folder)
        print (local_filename)
        #check if folder for file exists and wether or not you have already it
        if os.path.exists(local_folder) and not os.path.isfile(local_filename):
            with open(local_filename, 'wb') as f_output:
                ftp.retrbinary('RETR '+ filename, f_output.write)
                ftp.quit()

【问题讨论】:

  • 做一个每次找到目录时递归调用自己的函数

标签: python download ftp iterator


【解决方案1】:

我引导你到Alvin's Big Data Notebook。在那里你会找到一个使用 pysftp 和 walktree 的例子。我不知道您使用的是什么 FTP 库,但如果您使用的是 pysftp,这个示例应该会有所帮助。关键是了解如何使用walktree

【讨论】:

  • 不要发布仅链接的答案 + 那篇文章涉及 SFTP(尽管有标题),所以它是无关紧要的 - OP 使用 ftplib (FTP),而不是 pysftp (SFTP) + 不要回答重复的问题,投票关闭它们。
  • @MartinPrikryl 不要告诉我该怎么做!开个玩笑,谢谢您的建议,但是,将来您可能会考虑提供类似...“我不知道您是否知道这一点,但您不应该执行以下操作...”遇到更有启发性。
猜你喜欢
  • 2018-05-22
  • 2011-03-12
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2016-06-03
相关资源
最近更新 更多