Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2020
    residenza
    Italia
    Messaggi
    5

    Creare una lista di dict in python

    Salve a tutti, ho scritto un codice che estrae linee da un csv, le tokenizza, crea un dizionario ed in teoria crea una lista con tutti questi dizionari. In pratica crea una lista con 15mila elementi uguali. Questo è il miocodice:
    codice:
    with open('C:\file', 'r') as f:
       key = f.readline().replace('\n', '').split(',')
       while (True) :
           line = f.readline().replace('\n', '')
           if (line == '') :
               break
           value = line.split(',')
           for i in range(len(key)):
               app.update({key[i] : value[i]})
           docs.append(app)
    
    
    print(docs)
    se invece di
    codice:
    docs.append(app)
    metto
    codice:
    print(app)
    stampa tutti diversi. qualcuno di voi sa come potrei risolvere questo problema? non ho proprio idea da cosa sia dovuto

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Puoi condensare tutto quel codice in molte meno righe, in tanti modi (while True non si può vedere, cicla direttamente con un for line in f, magari con un enumerate in mezzo per gestire la lista di key)
    comunque, il modo più furbo è usare il modulo csv e con dictReader e poi fare la lista dei risultati

    sempre se ho capito cosa vuoi fare

    un consiglio: metti tutto il codice non pezzetti. Ad esempio, app ipotizzo che sia un dizionario, ma non è definito... e stessa cosa per docs

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2020
    residenza
    Italia
    Messaggi
    5
    Si infatti ho usato il modulo csv, me ne sono ricordato dell'esistenza poco dopo che ho pubblicato la domanda ma ho dimenticato di toglierla ha funzionato al primo colpo . Purtroppo non programmo molto in Python, solitamente uso JAVA, quindi molte cose non conoscendole tendo a complicarmi la vita "creandole" da me. Ad esempio quel whlie(True) sta li perchè altrimenti la linea vuota dava errore sui valori key e value.

    Comunque grazie mille per aver speso il tuo tempo a rispondermi

  4. #4
    Puoi postare la soluzione completa? Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2020
    residenza
    Italia
    Messaggi
    5
    codice:
    import csv, time, Connessione as con
    
    
    inizio = time.time()
    db = con.connection()
    docs = []
    
    
    with open('C:\test', newline = '') as f:
        reader = csv.DictReader(f)
        for row in reader:
            docs.append(row)
            
    db.bulk_docs(docs)
    fine = time.time() - inizio
    if(fine < 60) :
        print("\nEseguito in: ", round(fine, 2), "sec")
    else :
        print("\nEseguito in: ", round(fine/60, 2), "min")
    Eccola

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.