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

时间:2017-02-16 13:56:00

标签: 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 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) 我从这里收集表名。 然后,执行并获得结果。

enter image description here

我的代码的实际输出是.. enter image description here

我的期望是

enter image description here

(不是3栏......有2000张桌子)

我认为我的代码接近答案......但它不起作用.. 我的工作差不多完成了,但我无法完成这部分工作。 我用Google搜索了近10个小时.. 我不知道如何......请帮忙

我认为这些部分有问题

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

1 个答案:

答案 0 :(得分:0)

csvwriter.writerow方法允许您在输出csv文件中编写。这意味着一旦您调用writerow方法,该行就会被写入,您无法再回复它。当你编写代码时:

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

你在说:

  

"对于每个结果,写一个包含data_kp[i]的行然后写一个   包含row。"

的行

这样,所有内容都将在data_kp[i]row之间交替写入。

令人惊讶的是,它不是我们在实际输出中获得的。我认为你改变了一些东西。这样的事情:

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

但是这显然没有完全解决你的问题:表格的名称没有正确显示(每列上有一个字符)并且它们不是并排的。所以你有两个问题:

<强> 1。获取一个单元格中的表名称而不是拆分

首先,让我们看看有关csvwriter的文档:

  

一行必须是Writer对象的可迭代字符串或数字

但是您的data_kp[i]String,而不是String&#34;可迭代的String。这不行!但你也没有得到任何错误,为什么?这是因为python中的String本身可以被视为for char in "abcde": print(char) 的可迭代。亲自尝试:

#  Give an Iterable containing only data_kp[i]
c.writerow([data_kp[i]])

现在,你可能已经明白要做些什么才能使事情发挥作用:

csvwriter

现在您的表名只显示在一个单元格中!但我们还有另一个问题......

<强> 2。获取并排显示的表格名称

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

您的代码需要进行一些重新思考,因为zip_longest不是用于写入列而是用于行。然后,我们将使用itertools模块的zip函数。有人可以问为什么我不使用Python的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) 函数一旦到达就会停止最短名单的结尾!

while(window.pollEvent())

注意: 此处提供的代码尚未经过测试,可能包含错误。不过,您应该能够(使用我提供的文档)修复它以使其正常工作!祝你好运:)