2013-10-08 5 views
1

Я могу получить это для вывода моей команды MYSQL, которую я удалил для обеспечения безопасности, однако я все время получаю сообщение об ошибке при попытке записать этот вывод с разделителями табуляции в CSV. Любая помощь для повышения новичков Python была бы оценена по достоинству.tab с разделителем на csv

#!/usr/bin/pytho 
import sys, csv 
import MySQLdb 
import os 
import mysql.connector 
import subprocess 
import string 
if __name__ == '__main__': 

du = sys.argv[1] 
csv_home = '/home/oatey/bundle_' + du + '.csv' 
input = sys.stdin 
output = sys.stdout 


#read and rewrite to file with arguement 
new = open("/home/oatey/valid.sql2", "w")  
with open("/home/oatey/bundle.sql")as write_query: 
#read_file = write_query.read() 

    for line in write_query: 
    lr = line.replace('{$$}', du) 
    print lr 
    new.write(lr) 
    new.close() 
    write_query.close()   
with open("/home/oatey/valid.sql2") as w: 
    mysql_output = subprocess.check_output(MYSQL_COMMAND, stdin=w)  

    #print mysql_output 
    b = open("/home/oatey/" + du + ".txt", "r+") 
    #",".join("%s" % i for i in mysql_output 
    b.write(mysql_output) 
    print mysql_output   
b.close() 

#read tab-delimited file 
with open("/home/oatey/" + du + ".txt", 'rb') as data:  
    cr = data.readlines() 
    contents = [line for line in cr] 

with open("/home/oatey/" + du + ".csv", "wb") as wd: 
    cw = csv.writer(wd, quotechar='', quoting=csv.QUOTE_NONE) 
    wd.write(contents) 
+2

Что ошибка вы получаете? –

+0

, пока вы выполняете свою команду через подпроцесс, можете ли запросить mysqldump выполнить эту работу для вас и экспортировать в CSV вариант? 'mysqldump -u [имя_пользователя] -p -t -T/path [database] --fields-enclosed-by = \" --fields-terminated-by =, ' – Majid

+0

обычно да .... но это часть автоматизированного этапа, когда пользователь вводит путь к csv ... – goat

ответ

1

небось ошибки вы получаете это:

TypeError: must be string or buffer, not list

contents список, вы не можете написать список с помощью write(). Цитата docs:

file.write(str)

Write a string to the file.

Вместо этого используйте csvwriter.writerows():

with open("/home/oatey/" + du + ".csv", "wb") as wd: 
    cw = csv.writer(wd, quotechar='', quoting=csv.QUOTE_NONE) 
    cw.writerows(contents) 
+0

Я получаю ошибку атрибута: объект 'module' не имеет атрибута 'writer'. Я пытаюсь использовать csv.writer и csvwriter .... – goat

+0

Это сработало после того, как я удалил файлы с csv в заголовке из каталога. Это вызвало отказ модуля! – goat

Смежные вопросы