在csv python中写入查询行

时间:2014-03-04 21:27:05

标签: python csv pymysql

我正在写一个脚本来在csv文件中写入查询结果行。数据是电子邮件地址,如下所示:

  

email1@mail.com

     

email2@mail.com

     

email3@mail.com

现在,我的代码将我的结果写在csv文件中,如下所示:

  

('email1@mail.com'),('email2@mail.com'),('email3@mail.com'),

如何使用下一行而不是行?

编辑:似乎我的查询在括号内给出了数据,如('email1@mail.com'),

以下是代码:

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()

2 个答案:

答案 0 :(得分:2)

以下内容似乎可以解决您的问题:

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

要获得更详细/更合适的解决方案,您必须向我们提供更多详细信息,例如:你的输入格式是什么样的,你希望你的输出文件是什么样的(实际的数据,而不是抽象的“a,b,c”)。

作为旁注,请勿调用变量listfile。这些名称会影响内置列表/文件类型。

编辑:如果您所做的只是每行写一个电子邮件地址,那么您实际上并不是在使用CSV,也不需要该模块。这就是我要做的事情:

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

答案 1 :(得分:1)

像pymysql这样的模块符合Python DB API。游标的fetchall()方法返回元组列表。每个元组代表数据库查询中的一行。将其转换为字符串可能无法满足您的需求:

>>> str((1, ))
'(1,)'

writerow方法期望得到一个序列,序列的每个元素都作为行中的值输出,并根据所选格式使用适当的表示和分隔符。

当前逻辑循环遍历数据库查询返回的所有行。每次循环时,它会向列表中添加另一个(可能不正确的)值,打开文件进行写入,并写出当前列表。由于每次迭代都会创建一个新文件,因此您只能看到最后一次迭代中写的内容。

这是可能做你想做的代码。

import csv

data = [("first",), ("second",), ("Third",)]
list = []

file = open('file.csv', 'wb')
writer = csv.writer(file)
for row in data :
    writer.writerow(row)
file.close()