+ 2

CSV files

How would you edit the details of a runner e.g. if they did another race and got a better run time, you can type their new time and it will show, and being able to remove them from the CSV file without using the CSV module and others e.g. if they were disqualified from the race, you would need to remove them. https://code.sololearn.com/cvkZ4jY92bCX/?ref=app At the moment I can add and search for a runner

16th Mar 2019, 5:19 PM
farhan bhatti
farhan bhatti - avatar
7 Answers
+ 3
Modifying a file is a tricky business. There is no built-in way to insert or modify the contents of a file that you are reading from. You can use temp files for writing, as described here: https://stackoverflow.com/questions/16020858/inline-csv-file-editing-with-JUMP_LINK__&&__python__&&__JUMP_LINK But I would rather recommend a database approach if you need to modify the data. Sqlite3 is not too difficult to use, and it is built in to python. In fact it creates a file to store the data that you can access and change with sql statements. See an example : https://code.sololearn.com/csZ5bjiWfdCR/?ref=app
21st Mar 2019, 9:03 PM
Tibor Santa
Tibor Santa - avatar
+ 2
I just spent a minute playing with what you had and think you can get there from where I left it. this is your change_runner function edited to what I think will work Obviously not finishied if this does not help you can shoot me a message and i can finish with where i was going. Good Luck def change_runner(): try: infile = open('marathon.csv', 'w') # open file with write outfile = '' #this will hold what is read runner=input('Enter the name of the runner to edit: ') line = readline(infile) #read the first line of the time while line != '': #if the lines not empty if runner in line: # in this part of the loop we have the line of the file that contains the name and time. you can display it or break it into elements or whatever you want to do. just make sure to write it to the outfile before leaving here so that it can be written after iterating the entire file. else: #else the line doesnt contain our runner. assign it to a variable to hold it. outfile = outfile + line + '\n' infile.write(outfile) infile.close() except IOError: #handle except here print('Action completed!')
21st Mar 2019, 9:28 PM
Matt
Matt - avatar
+ 1
thanks Tibor ill see if that works, but im trying to change the data without importing any modules e.g. not importing CSV and using the writer and reader functions😓
22nd Mar 2019, 9:05 AM
farhan bhatti
farhan bhatti - avatar
+ 1
Thanks Matt, i appreciate you taking the time to answer my question. ill see if i can make it work to modify the details, if you dont mind could you finish the code😅
22nd Mar 2019, 9:11 AM
farhan bhatti
farhan bhatti - avatar
+ 1
Why do you not want to import anything? Doing it without using 'import os' gets tricky
22nd Mar 2019, 9:54 AM
Matt
Matt - avatar
+ 1
I take that back. here is a delete_runner() function that deletes data. Minor modification to it should allow your update things in the file. (reference what I had said earlier on iterating over the line) def delete_runner(): try: infile = open('marathon.csv','r') runner=input('Enter the name of the runner you would like to remove: ') #outfile to store the modified data outfile = [] #priming read line = infile.readline() while line != '': if runner in line: line = infile.readline() else: #in a try catch to help trouble shoot try: outfile.append(line) line = infile.readline() except Exception as err: print(err) # close file object for read infile.close() #open file object for write infile = open('marathon.csv', 'w') #iterate over new list and write to the file for items in outfile: infile.write(items) #close the file infile.close() except IOError: print('There was a problem reading the file')
22nd Mar 2019, 9:48 PM
Matt
Matt - avatar
+ 1
its for a mini project where i. was trying to build a database but not use any modules, ik it would be easier but i was trying to give myself a challenge and got stuck😓. Thanks Matt
23rd Mar 2019, 8:38 AM
farhan bhatti
farhan bhatti - avatar