在csv中编写时,如何在Python中分隔列

在csv中编写时,如何在Python中分隔列,python,csv,Python,Csv,我的代码是 import pymysql conn=pymysql.connect(host=.................) curs=conn.cursor() import csv f=open('./kospilist.csv','r') data=f.readlines() data_kp=[] for i in data: data_kp.append(i[:-1]) c = csv.writer(open("./test_b.csv","wb")) def ex

我的代码是

import pymysql
conn=pymysql.connect(host=.................)
curs=conn.cursor()
 import csv
f=open('./kospilist.csv','r')
data=f.readlines()
data_kp=[]
for i in data:
    data_kp.append(i[:-1])


c = csv.writer(open("./test_b.csv","wb"))

def exportFunc():
    result=[]
    for i in range(0,len(data_kp)):
        xp="select date from " + data_kp[i] + " where price is null"
        curs.execute(xp)
        result= curs.fetchall()

        for row in result:
            c.writerow(data_kp[i])
            c.writerow(row)

        c.writerow('\n')



exportFunc()
data_kp正在读取表名 表的名称如下(字符串,例如:a000010) 我从这里收集表名。 然后,执行并获得结果

我的代码的实际输出是。。

我的期望是

(不是3列..有2000个表)

我以为我的密码接近答案。。。但它不起作用。。 我的工作快完成了,但我没能完成这部分。 我在谷歌上搜索了将近10个小时。。 我不知道怎么。。请帮忙

我觉得这部分有问题

for row in result:
            c.writerow(data_kp[i])
            c.writerow(row)
该方法允许您在输出
csv
文件中写入一行。这意味着,一旦调用了
writerow
方法,该行将被写入,您将无法返回该行。编写代码时:

for row in result:
    c.writerow(data_kp[i])
    c.writerow(row)
你是说:

“对于每个结果,写一行包含
数据\u kp[i]
,然后写一个 包含
行的行

这样,所有内容都将在
data\u kp[i]
row
之间交替写入

令人惊讶的是,这并不是我们从你们的实际产出中得到的。我想你改变了一些事情。诸如此类:

c.writerow(data_kp[i])
for row in result:
    c.writerow(row)
但这显然并没有完全解决您的问题:表的名称没有正确显示(每列上有一个字符),并且它们没有并排显示。这里有两个问题:

1。在一个单元格中获取表名,并且不进行拆分

首先,让我们看一下关于:

的文档。 对于Writer对象,行必须是字符串或数字的iterable

但是您的
数据\u kp[i]
是一个
字符串
,而不是“字符串的iterable”。这不行!但是你也没有得到任何错误,为什么?这是因为在python中,
String
本身可能被认为是
String
的一个iterable。自己试试:

for char in "abcde":
    print(char)
现在,您可能已经了解了如何使这些工作正常进行:

#  Give an Iterable containing only data_kp[i]
c.writerow([data_kp[i]])
现在,您的表名仅显示在一个单元格中!但我们还有一个问题

2。将表格名称并排显示

在这里,这是代码逻辑中的一个问题。您正在浏览您的表名,写入包含它们的行,并期望它们并排写入并获得日期列

您的代码需要重新思考一下,因为
csvwriter
不是用来写列的,而是用来写行的。然后我们将使用模块的
zip\u
函数。有人可能会问我为什么不使用Python的
zip
内置函数:这是因为列的大小不是相等的,而且
zip
函数在到达最短列表的末尾时将停止

import itertools

c = csv.writer(open("./test_b.csv","wb"))

# each entry of this list will contain a column for your csv file
data_columns = []

def exportFunc():
    result=[]
    for i in range(0,len(data_kp)):
        xp="select date from " + data_kp[i] + " where price is null"
        curs.execute(xp)
        result= curs.fetchall()

        # each column starts with the name of the table
        data_columns.append([data_kp[i]] + list(result))

    # the * operator explode the list into arguments for the zip function
    ziped_columns = itertools.zip_longest(*data_columns, fillvalue=" ")

    csvwriter.writerows(ziped_columns)
注意:
这里提供的代码尚未经过测试,可能包含bug。不过,您应该能够(通过使用我提供的文档)修复它,以使其正常工作!祝你好运:)

你能提供一个csv行的示例吗?请显示输入、预期输出和实际输出(作为csv,而不是屏幕截图!)。我添加了示例行。作为csv的实际输出如下a,0,0,5,9,3,0 2000-01-04 2000-01-05 2000-01-11 2000-01-12 2000-01-13 2000-01-14 2000-01-17 2000-01-18 2000-01-19 2000-01-20 2000-01-21 2000-01-24