【问题标题】:tab delimited to csv制表符分隔为 csv
【发布时间】:2013-10-15 19:29:27
【问题描述】:

我可以让它输出我为安全起见已删除的 MYSQL 命令,但是当我尝试将此制表符分隔的输出写入 CSV 时,我一直收到错误消息。任何有助于提升 Python 新手的帮助将不胜感激。

#!/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)

【问题讨论】:

  • 您遇到了什么错误?
  • 当您通过子进程执行命令时,是否可以要求 mysqldump 为您完成工作并导出到 CSV 是一种选择? mysqldump -u [username] -p -t -T/path [database] --fields-enclosed-by=\" --fields-terminated-by=,
  • 通常是的......但这是用户输入 csv 路径的自动化步骤的一部分......

标签: python mysql csv


【解决方案1】:

我敢打赌你得到的错误是:

TypeError: 必须是字符串或缓冲区,而不是列表

contents是一个列表,你不能通过write()写一个列表。引用docs:

file.write(str)

将字符串写入文件。

改为使用csvwriter.writerows():

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

【讨论】:

  • 我收到一个属性错误:“模块”对象没有属性“作者”。我尝试了 csv.writer 和 csvwriter....
  • 从目录中删除标题中带有 csv 的文件后,它起作用了。这导致模块失败!
猜你喜欢
  • 1970-01-01
  • 2013-06-11
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多