Go through a file several times to make an FTP connection

0

I need to go through the file login.txt several times, as many times as users have (in this case I only have one user)

with open("login.txt") as fichero:
    dirServer = fichero.readline().split(":")[1].strip()
    usuario = fichero.readline().split(":")[1].strip()
    passwd = fichero.readline().split(":")[1].strip()

# Se crea una instancia de dicha clase. Toma como argumentos host, user, passwd
ftp = FTP(dirServer)

# Hacemos el login de usuario y passwd, 
ftp.login(user=usuario, passwd=passwd)

# La función FTP.cwd() es utilizada para cambiar de directorio o carpeta
ftp.cwd("zzz") 

# Retorna información sobre los archivos y carpetas en la ubicación actual.
ftp.retrlines('LIST')

# Ejecuta el comando RETR para descargar el archivo README en modo binario.
# El segundo parámetro es una función callback que será llamada por cada bloque de bytes recibidos,
# que a su vez estos son pasados como argumento a dicha función. En este caso se pasa la función write de un objeto file
ftp.retrbinary('RETR prueba.txt', open('PruebaFtp.txt', 'wb').write)

# cerramos la conexion
ftp.quit()

The file format login.txt is:

dirServer: 10.0.0.4
usuario: pepito
passwd: ****

Now the file is the following login.txt

dirServer: 10.0.0.4
usuario: pepito
passwd: ****
dirServer: 10.0.0.4
usuario: donpinpon
passwd: ****
dirServer: 10.0.0.4
usuario: donpinpon
passwd: ****

I do not know how to cross it, can someone help me?

    
asked by antoniop 31.10.2018 в 10:36
source

2 answers

0

Just loop the same code you used, and exit the loop when there is no more data to read, which you will detect because readline() returns an "empty" line.

Something like this:

with open("login.txt") as fichero:
    while True:   # Repetir por siempre (o hasta que salgamos con break)
        linea = fichero.readline()
        if not linea:   # Si leemos linea vacia, salimos del bucle
            break
        # En caso contrario, separamos el dato y hacemos lo mismo con las dos lineas siguientes
        dirServer = linea.split(":")[1].strip()
        linea = fichero.readline()
        usuario = linea.split(":")[1].strip()
        linea = fichero.readline()
        passwd = linea.split(":")[1].strip()

        # El resto sigue como lo tenías, accediendo por ftp 
        # según los datos que acabamos de leer
        ftp = FTP(dirServer)
        ftp.login(user=usuario, passwd=passwd)
        ftp.cwd("zzz") 
        ftp.retrlines('LIST')
        ftp.retrbinary('RETR prueba.txt', open('PruebaFtp.txt', 'wb').write)
        ftp.quit()
    
answered by 31.10.2018 / 12:57
source
0

you can do it like this:

#libreria para mejorar la visualizacion de arreglos
from pprint import pprint

#abrimos el archivo
with open("ts.txt") as f:
    # leemos linea por linea del archivo solo si no esta vacia
    # y la asignamos a un arreglo r
    r = [ x.split(":")[1].strip()  for x in f if x.strip()]

#imprimimos los 3 primeros elementos
print("primeros 3 elementos: {0} {1} {2} \n".format(r[0],r[1],r[2]) )

#imprimimos todo el arreglo
print("arreglo completo:")
pprint(r)

result:

primeros 3 elemntos: 10.0.0.4 pepito ****

arreglo completo:
['10.0.0.4',
 'pepito',
 '****',
 '10.0.0.4',
 'donpinpon',
 '****',
 '10.0.0.4',
 'donpinpon',
 '****']
    
answered by 01.11.2018 в 17:27