Home > OS >  How to print only a the content of a cell in a specific row from a csv file in Python
How to print only a the content of a cell in a specific row from a csv file in Python

Time:08-06

I'm new to Python so excuse me if my question is kind of dumb. I send some data into a csv file (I'm making a password manager). So I send this to this file (in this order), the name of the site, the e-mail corresponding and finally the password.

But I would like to print all the names already written in the csv file but here is my problem, for the first row it does print the whole row but for the following rows it works just well.

Here is my code, I hope u can help me with this.

    csv_file = csv.reader(open('mycsvfile.csv', 'r'), delimiter=';')
    try :
        print("Here are all the sites you saved :")
        for row in csv_file :
            print(row[0])
    except :
        print("Nothing already saved")

Maybe it can help, but here is how I wrote my data into the csv file:

    #I encrypt the email and the password thanks to fernet and an already written key
    #I also make sure that the email is valid
    file = open('key.key', 'rb')
    key = file.read()
    file.close()
    f = Fernet(key)
    website = input("web site name : \n")
    restart = True
    while restart :
        mail = input("Mail:\n")
        a = isvalidEmail(mail)
        if a == True :
            print("e-mail validated")
            restart = False
        else :
            print("Wrong e-mail")

    pws = input("password :\n")
    psw_bytes = psw.encode()
    mail_bytes = mail.encode()
    psw_encrypted_in_bytes = f.encrypt(psw_bytes)
    mail_encrypted_in_bytes = f.encrypt(mail_bytes)
    mail_encrypted_str = mail_encrypted_in_bytes.decode()
    psw_encrypted_str = psw_encrypted_in_bytes.decode()

    f = open('a.csv', 'a', newline='')
    tup1 = (website, mail_encrypted_str, psw_encrypted_str)
    writer = csv.writer(f, delimiter = ';')
    writer.writerow(tup1)
    print("Saved ;)")
    f.close()
    return

And here is my output (I have already saved data) Output (First, you see the name of the ws with the email and the psw encrypted then just the name which is what I want

CodePudding user response:

make list from csv.reader()

rows = [row for row in csv_file]

and now you can get element by identifier using rows as list of lists

rows[id1][id2]

CodePudding user response:

I finally succeed, instead of using a csv.Reader, i used a csv.DictReader and as all the names i'm looking for are on the same column, i juste have to use the title of the columns. So here is the code :

with open('mycsv.csv', newline='') as csvfile:
        data = csv.DictReader(csvfile)
        print("Websites")
        print("---------------------------------")
        for row in data:
            print(row['The_title_of_my_column'])
  • Related