Write query rows in csv python

user2094540 picture user2094540 · Mar 4, 2014 · Viewed 8.4k times · Source

I'm wrinting a script to write query results rows in a csv file. The data is email adresses, like this :

[email protected]

[email protected]

[email protected]

For now, my code writes my results in the csv file like this :

('[email protected]'), ('[email protected]'), ('[email protected]'),

How can I use next lines instead of rows ?

EDIT : It seems that my query gives me data between brackets like ('[email protected]'),

Here is the code :

import pymysql
import csv

db = pymysql.connect(host="localhost", port=3306, user="foo", passwd="bar", db="db")
cursor = db.cursor()

query3 = """SELECT email FROM tmp"""


cursor.execute(query)

data = cursor.fetchall()
list = []

for row in data :
  value = str(row)
  list.append(value)    
  file = open('file.csv', 'wb')
  data = csv.writer(file)
  data.writerow(list)

cursor.close()
db.close()
file.close()

Answer

Max Noel picture Max Noel · Mar 4, 2014

The following looks like it'd solve your problem:

f = csv.writer(open("file.csv", "w"))
for row in data:
    f.writerow([str(row)])

For a more detailed/appropriate solution, you'll have to give us more details, e.g. what does your input format look like, and what do you want your output file to look like (actual data, not abstract "a, b, c").

As a side note, do not call your variables list or file. Those names shadow the built-in list/file types.

EDIT: If all you're doing is writing one e-mail address per line, you're not really doing CSV, nor do you need the module. Here's what I'd do:

f = open("file.txt", "w")
for i in email_addresses:
    f.write(i + "\n")