delete row from file using csv reader and lists python -


there similar questions on none deal specifics require.

i have following code seeks delete row in file, based on specified user input. methodology

  1. read file list
  2. delete relevant row in list (ideally while reading in list?)
  3. over-write file.

it's 2 , 3 guidance on comments best solution (for beginners, teaching/learning purposes) carry out sort of simple delete/edit in python csv reader.

code

""" ==============task 1. search given username 2. delete whole row particular user  e.g. enter username: marvr >>the record marvr has been deleted file. """  import csv  #1. code snippet asks user username , deletes user's record file.  updatedlist=[] open("fakefacebook.txt",newline="") f:   reader=csv.reader(f)   username=input("enter username of user wish remove file:")   row in reader: #for every row in file       if username not in updatedlist:         updatedlist=row #add each row, line line, list called 'udpatedlist'         print(updatedlist)   #delete row user list? #overwrite current file updated list? 

file contents:

username,password,email,no_of_likes marvr,pass123,marv@gmail.com,400 smithc,open123,cart@gmail.com,200 blogsj,2bg123,blog@gmail.com,99 

update

based on answer below, have this, when overwrites file, doesn't update list correctly, not sure why.

import csv def main():     #1. code snippet asks user username , deletes user's record file.     updatedlist=[]     open("fakefacebook.txt",newline="") f:       reader=csv.reader(f)       username=input("enter username of user wish remove file:")       row in reader: #for every row in file           if row[0]!=username: #as long username not in row .......             updatedlist=row #add each row, line line, list called 'udpatedlist'             print(updatedlist)     updatefile(updatedlist)  def updatefile(updatedlist):     open("fakefacebook.txt","w",newline="") f:         writer=csv.writer(f)         writer.writerow(updatedlist)         print("file has been updated")   main() 

it appears print updatedfile correctly (as list) in removes username entered. on writing file, prints 1 username file.

any thoughts can accept final answer?

if username not in updatedlist:

to me should be:

if row[0] != username:

then in second loop write updatedlist csv file. personnally write in file while reading, in end delete old file , replace new one, makes 1 loop only.

edit:

replace updatedlist=row updatedlist.append(row): first 1 means overwriting updatedlist 1 row while second 1 means adding 1 more row it.

writerow writes 1 row, , give list of rows. use writerows instead , writing function work.

you made yourself, objective. other answers give better (faster, cleaner ...) ways, won't.


Comments

Popular posts from this blog

networking - Vagrant-provisioned VirtualBox VM is not reachable from Ubuntu host -

c# - ASP.NET Core - There is already an object named 'AspNetRoles' in the database -

ruby on rails - ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true -