In this tutorial I will explain how to turn an array to a csv file. I will show you two ways. One is in memory and the other is to a file.
For both ways you need to import csv and io package.
- import csv, io
Way 1 Write (In Memory):
- #Create the string buffer
- output = io.StringIO()
- #Setup the csv writer to write the results to a string buffer
- wr = csv.writer(output, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
Way 2 Write (File):
- #Crate the file itself in write mode
- f = open('filename.csv', 'w')
- #Setup the csv writer to write the results to a file.
- wr = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
Technically both ways have the same setup for the csv writer. Then to write results to the csv writer you then pass an array of values like below.
- wr.writerow(['123',5,4,'value'])
To Read the contents of the file or string buffer depends on which way you chose. I show you those ways below.
Way 1 Read (In Memory):
- b = bytes(output.getvalue(), 'utf-u')
Way 2 Read (File):
- f.close()
- file_data = open('filename.csv', 'r').read()
If you want to send the file down using something like flask send_file then you need to convert it to BytesIO.
- buffer = BytesIO()
- buffer.write(b)
- #You must seek to beginning otherwise it won't send anything back.
- buffer.seek(0)
Now if you are sending it as a file back to the user and are using something like flask this is how you do that. Pretty straight forward.
- return send_file(buffer, mimetype='application/octet-stream', as_attachment=True, attachment_filename='myFile.csv')