Domanda Estrapolare informazioni dalle stringhe

TitanKrav

Utente Bronze
23 Gennaio 2018
8
1
3
20
Salve Ragazzi,
volevo chiedervi come potrei fare se, presa una stringa composta per ogni riga da un[ nome utente : password] , io volessi creare una funzione che riconosce qual è il nome utente e qual è la password...
Con quel poco di codice che ho scritto io riesco a farlo soltanto per la prima riga, ma poi per estrapolare questi dati per ogni riga come dovrei fare?

Vi lascio il codice
Python:
dati_utenti = {
    'pippoBastardo': 'cammello',
    'valeria': 'enciclopedia',
    '[email protected]': 'austrolopitecus',
    'xStronzo': 'telefonino94'
}

stringa_dati = str(dati_utenti)
stringa_dati = stringa_dati.strip("{")         #elimino le parentesi graffe aperte
stringa_dati = stringa_dati.strip("}")         #elimino le parentesi graffe chiuse
stringa_dati = stringa_dati.replace(",","\n")  #elimino tutte le virgole
stringa_dati = stringa_dati.replace(" ","")    #elimino tutti gli spazi
stringa_dati = stringa_dati.replace("'","")    #elimino tutti gli apici


def righe_stringa(stringa):
    count =1
    for carattere in stringa:
        if carattere == "\n":
            count += 1
    return count


#print('Righe:',righe_stringa(stringa_dati))

#file1 = open('Dati Utenti.txt','w')
#file1.write(stringa_dati)
#file1.close()
 
  • Mi piace
Reazioni: lupobianco
Non ho capito. Posta un esempio di input (parte del file Dati Utenti.txt) e output (il dictionary o il comportamento della funzione che vuoi creare).
 
dati_utente è un dictionary in python dove il nome utente è la key e la password è il value, quindi ricaviamo tutti le key e richiamiamo il value per ogni key
Python:
for x in dati_utenti:
    print("L'utente " + x + " ha come password: " + dati_utenti[x])
 
  • Mi piace
Reazioni: zipippino
Buongiorno ragazzi, grazie per avermi risposto... siccome questo programma volevo implementarlo facendogli leggere i dati degli utenti da un file , cioè un file dove fossero salvati tutti i dati degli utenti registrati, non penso possa utilizzare il dizionario da file di testo, proprio perché è una serie di stringhe ecc, quindi ho pensato a questa soluzione per riuscire a capire se UD_Utente e Password corrispondano... ditemi cosa ne pensate
Python:
dati_utenti = {
    'pippoBastardo': 'cammello',
    'valeria': 'enciclopedia',
    '[email protected]': 'austrolopitecus',
    'xStronzo': 'telefonino94'
}

nome_utente = input("Inserisci nome utente: ")
password_utente = input("Inserisci password utente: ")

stringa_dati = str(dati_utenti)
stringa_dati = stringa_dati.strip("{")         #elimino le parentesi graffe aperte
stringa_dati = stringa_dati.strip("}")         #elimino le parentesi graffe chiuse
stringa_dati = stringa_dati.replace(",","\n")  #elimino tutte le virgole
stringa_dati = stringa_dati.replace(" ","")    #elimino tutti gli spazi
stringa_dati = stringa_dati.replace("'","")    #elimino tutti gli apici

#mi ritorna l'indice dell'ultimo carattere dell'ID_utente
def riconoscimento_utente(stringa,utente):
    start_pos = 0
    final_pos = 0

    start_pos = stringa.find(utente)
    caratteri_rimanenti = len(stringa[:start_pos])
    for carattere in stringa[start_pos:]:
        final_pos = (stringa[start_pos:].find(':') -1)+caratteri_rimanenti
    return final_pos

#mi ritorna l'indice dell'ultimo carattere della password
def riconoscimento_password(stringa,password):
    start_pos = 0
    final_pos = 0

    start_pos = stringa.find(password)
    caratteri_rimanenti = len(stringa[:start_pos])
    for carattere in stringa[start_pos:]:
        final_pos = (stringa[start_pos:].find('\n')-1)+caratteri_rimanenti
    return final_pos

'''
se nella stringa dati passata da input, l'user inserito da tastiera è uguale
alla porzione di stringa che parte da dove inizia l'ID_Utente e che finisce
un carattere prima dei due punti ; e se la password inserita dall'utente da tastiera,
è uguale alla porzione di stringa che inizia all'indice ritornato da stringa.find(passsword)
 e finisce un carattere prima di '\n', allora login riuscito, altrimenti bla bla bla
'''
def autenticazione(user, pw):
    start_posU = stringa_dati.find(nome_utente)
    start_posP = stringa_dati.find(password_utente)
    if stringa_dati[start_posU: riconoscimento_utente(stringa_dati, nome_utente)+1] == user and stringa_dati[start_posP: riconoscimento_password(stringa_dati, password_utente)+1] == pw:
        print("Bentornato!")
    else:
        print("Attenzione, hai inserito un nome utente o la password errati.")


autenticazione(nome_utente,password_utente)
 
Tu stai facendo la ricerca del nome utente in un array di stringhe leggendo il file e pulendo ogni carattere ma avrei fatto diversamente, avrei letto il file di testo con la giusta tokenizzazione ed avrei aggiunto tutto in un dictionary strutturato come dati_utenti.
 
Ultima modifica:
Tu stai facendo la ricerca del nome utente in un array di stringhe leggendo il file e pulendo ogni carattere ma avrei fatto diversamente, avrei letto il file di testo con la giusta tokenizzazione ed avrei aggiunto tutto in un dictionary strutturato come dati_utenti.
Agendo poi sulla key e il corrispondente value del dizionario.. uhm mi sembra più "pitonico" del mio. :asdbeer:
Messaggio unito automaticamente:

Tu stai facendo la ricerca del nome utente in un array di stringhe leggendo il file e pulendo ogni carattere ma avrei fatto diversamente, avrei letto il file di testo con la giusta tokenizzazione ed avrei aggiunto tutto in un dictionary strutturato come dati_utenti.


Rieccomi, secondo te adesso va bene ? allego anche il file di testo contenente tutti gli id e le password

Python:
file = open("Dati Accesso Utenti.txt","r")
text = file.read()

#Creazione dictionary Dati_Utente vuota
dati_utenti = {}

lista_parole = text.rsplit(",")
parola_id = ''
parola_pw = ''


#creo una stringa con tutti gli id separati da '-'
for parola in lista_parole:
    parola_id += parola[:parola.find(":")]+"-"
# successivamente uso la funzione rsplit() per creare una lista con soli id
lista_IDs = parola_id.rsplit("-")
list_lenght = len(lista_IDs)   #lunghezza lista
lista_IDs.remove(lista_IDs[list_lenght-1]) #rimuovo l'ultimo elemento della lista dato che è un carattere vuoto

for parola in lista_parole:
    parola_pw += parola[parola.find(":")+1:]+"-"
lista_PWs = parola_pw.rsplit("-")
copia__Lista_PWs = parola_pw.rsplit("-")

lista_PWs.remove(lista_PWs[len(lista_PWs)-1])

lista_PWs.reverse()
for elementoID in lista_IDs:
        dati_utenti[elementoID] = lista_PWs.pop()

def autenticazione(user_id, user_pw):
    try:
        if dati_utenti[user_id] == user_pw:
            print("Login Riuscito, Bentornato\\a",user_id)
    except:
        print("Utente e/o password errati!")
user_id = input("Inserire Utente ID:")
user_pw = input("Inserire la password utente:")

autenticazione(user_id,user_pw)
 

Allegati

  • Dati Accesso Utenti.txt
    145 bytes · Visualizzazioni: 7
  • Mi piace
Reazioni: JustARegularGuy
dati_utenti = dict(item.split(":") for item in open('Dati Accesso Utenti.txt').read().split(","))
Python:
file = open("Dati Accesso Utenti.txt","r")
text = file.read()

#Creazione dictionary Dati_Utente vuota
dati_utenti = {}

lista_parole = text.rsplit(",")
parola_id = ''
parola_pw = ''


#creo una stringa con tutti gli id separati da '-'
for parola in lista_parole:
    parola_id += parola[:parola.find(":")]+"-"
# successivamente uso la funzione rsplit() per creare una lista con soli id
lista_IDs = parola_id.rsplit("-")
list_lenght = len(lista_IDs)   #lunghezza lista
lista_IDs.remove(lista_IDs[list_lenght-1]) #rimuovo l'ultimo elemento della lista dato che è un carattere vuoto

for parola in lista_parole:
    parola_pw += parola[parola.find(":")+1:]+"-"
lista_PWs = parola_pw.rsplit("-")
copia__Lista_PWs = parola_pw.rsplit("-")

lista_PWs.remove(lista_PWs[len(lista_PWs)-1])

lista_PWs.reverse()
for elementoID in lista_IDs:
        dati_utenti[elementoID] = lista_PWs.pop()
Assumendo che il file che ci hai passato è effettivamente quello (o è strutturato allo stesso modo), il pezzo che ho citato può essere riassunto con
Python:
dati_utenti = dict(item.split(":") for item in open('Dati Accesso Utenti.txt').read().split(","))
 
  • Mi piace
Reazioni: TitanKrav
dati_utenti = dict(item.split(":") for item in open('Dati Accesso Utenti.txt').read().split(","))
Assumendo che il file che ci hai passato è effettivamente quello (o è strutturato allo stesso modo), il pezzo che ho citato può essere riassunto con
Python:
dati_utenti = dict(item.split(":") for item in open('Dati Accesso Utenti.txt').read().split(","))
Quella riga sostituisce tutte e 20 e oltre righe del mio pezzo di codice? O.O
 
Sai vero che quello è un dizionario e lo hai trasformato in stringa?
Sai vero che puoi trasformare i dizionari in json?
Sai vero che tutto ciò è estremamente ed esageratamente fuori standard e assurdo?
Dunque, dopo averti mentalmente urlato dietro (scusa) ecco come classificare realmente i dati di un utente:
1 in un server o file dovresti tenere solo la versione hashed della password
Eccco una guida https://www.pythoncentral.io/hashing-strings-with-python/

2 il formato corretto almeno secondo la mia esperienza è (tenendo solo user e password come informazioni):
Python:
import json

usersdata=[

{

"email":"[email protected]"

"password":"examplepassword1"

},

{

"email":"[email protected]"

"password":"examplepassword2"

}]

index=0

print(usersdata[index]["email"])#output: [email protected]

#usa dictionary["keyname"]=value

# per creare una nuova proprietà

#invece

#per eliminare un elemento usa

#del  dictionary["keyname"]

#usa dictorarray.append(object)

#per aggiungere un elemento ad unarray o un dizionario

#dopo aver importato il modulo json usa

#jsonstr=json.dumps(dictionary)

#per ottenere una stringa json

#invece usa

#dictionary=json.loads(str)

#per trasformare da stringa json a dizionario

#tutorial sui dizionari:

#https://www.programiz.com/python-programming/dictionary
 
  • Mi piace
Reazioni: TitanKrav