2014-03-04 3 views
3

CSV 파일에 쿼리 결과 행을 쓰는 스크립트가 출력됩니다.csv 파이썬에서 쿼리 행 작성

[email protected]

[email protected]

[email protected] 지금은

, 내 코드 쓰기 : 데이터는 다음과 같이 이메일 adresses입니다 내 결과는 다음과 같은 CSV 파일에 있습니다.

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

어떻게 행 대신 다음 행을 사용할 수 있습니까?

편집 : 여기

코드입니다, 내 쿼리 (' [email protected]')와 같은 괄호 나에게 데이터를 제공한다는 것 : 좋아

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

다음의 모습 귀하의 문제를 해결하십시오 :

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

자세한/적절한 해결 방법은 다음과 같습니다. 입력 형식이 어떻게 보이며 출력 파일을 어떻게 보이게 할 것입니까 (실제 데이터, 추상 "a, b, c"가 아님).

보조 메모로 변수 list 또는 file을 호출하지 마십시오. 이러한 이름은 내장 목록/파일 유형을가립니다.

EDIT : 한 줄에 하나의 전자 메일 주소를 쓰는 경우 CSV를 실제로 수행하지 않고 모듈을 필요로하지 않습니다. 내가 할 일은 다음과 같습니다.

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

위대한, 내 문제를 해결! 데이터 유형에 대한 내 게시물을 편집했습니다. –

+1

필요한 경우 한 줄에 하나의 전자 메일 주소 만 있으면 편집을 참조하십시오. –

+0

당신은 완전히 옳습니다.그게 지금 잘 작동하고 이유를 이해합니다. 감사 ! –

0

pymysql과 같은 모듈은 Python DB API를 준수합니다. 커서의 fetchall() 메서드는 튜플 목록을 반환합니다. 각 튜플은 데이터베이스 쿼리의 단일 행을 나타냅니다. 문자열이 변환하는 것은 아마 당신이 원하는 걸 줄하지 않습니다 적절한 표현으로 행의 값으로 출력은

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

writerow 방법은 시퀀스와 시퀀스의 각 요소를 제공 할 것으로 기대하고있다 구분 기호는 선택한 형식에 따라 다릅니다.

현재 논리는 DB 쿼리에 의해 반환 된 모든 행을 반복합니다. 반복 할 때마다 목록에 또 다른 (아마도 잘못된) 값을 추가하고, 쓰기 위해 파일을 열고, 현재 목록을 씁니다. 각 반복마다 새 파일이 만들어지기 때문에 마지막 반복에서 작성된 내용 만 볼 수 있습니다.

원하는대로 할 수있는 코드는 다음과 같습니다.

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