/ / Téléchargement de fichiers en fonction de leur existence et de leur dossier Python - python, téléchargement, chemin, dossier, fichier-existe

Téléchargement de fichiers en fonction de leur existence et de leur répertoire Python - python, téléchargement, chemin, dossier, fichier existe

J'essaie de créer un script qui téléchargeles fichiers d'un site FTP en fonction de mon dossier (basé sur le code de date) et de mon dossier et de mon téléchargement. Je pense avoir les pièces pour le faire, cependant, je ne sais pas comment les combiner pour les faire fonctionner.

Jusqu'ici, pour télécharger les fichiers du serveur FTP, j'ai le code suivant.

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

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:
if filename not in [".", ".."]:
local_filename = os.path.join(ddir, filename)
print(filename)

with open(local_filename, "wb") as f_output:
ftp.retrbinary("RETR "+ filename, f_output.write)
ftp.quit()

Pour extraire les valeurs de chaîne dont j'ai besoin duLes noms de fichiers et d'utiliser ces valeurs de chaîne pour déterminer si le dossier dans lequel les mettre est existant existe et si le fichier existe ou non, j'ai utilisé le code suivant. (Une remarque importante est que les valeurs de chaîne extraites des noms de fichiers que je télécharge correspondent aux codes que j'ai utilisés dans mes chemins de fichiers, ce qui me permet de les faire correspondre.)

for fname in filenames:
tl = fname[16:20]
t2 = fname[20:22]
t3 = fname[22:24]
if not tl: continue
print (tl) # You can append the result to a list
print (t2) # You can append the result to a list
print (t3) # You can append the result to a list
if os.path.exists(os.path.join("U:/SWEModelConstruction/UnmaskedData/",t1,t2,t3)) == true and os.path.isfile("U:/SWEModelConstruction/UnmaskedData/",t1,t2,t3,filename) != true

Réponses:

0 pour la réponse № 1

Pour suivre ta méthode,

def check_path(fname):
tl = fname[16:20]
t2 = fname[20:22]
t3 = fname[22:24]
if not tl: continue
if os.path.exists(os.path.join(dirr,t1,t2,t3)) == true and os.path.isfile(dirr,t1,t2,t3,filename) != true


for filename in filenames:

if filename not in [".", ".."]:
check_path(filename)
local_filename = os.path.join(ddir, filename)
print(filename)

with open(local_filename, "wb") as f_output:
ftp.retrbinary("RETR "+ filename, f_output.write)

Vous devez essentiellement vérifier que le chemin est disponible, sinon créer des répertoires.

Et puis, si le fichier est présent en utilisant os.path.isfile() et cela peut être fait d'une manière plus simple, comme (pour rendre les choses plus généralisées)

def check_path(path):
if not os.path.exists(path):
return False
return True

for filename in filenames:
if filename not in [".", ".."]:
local_filename = os.path.join(ddir, filename)
path="/".join(local_filename.split("/")[:-1])
# check if dir exists otherwise create one
# wrtie files that doesnt exists
if os.path.exists(path) and not os.path.isfile(filename):
with open(local_filename, "wb") as f_output:
ftp.retrbinary("RETR "+ filename, f_output.write)

J'espère que cela aide!