繁体   English   中英

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

[英]When I write in csv how do I separate columns in Python

我的代码是

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)

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 ”。 这行不通! 但是您也没有任何错误,为什么? 这是因为python中的String本身可能被视为String的可迭代对象。 自己尝试:

for char in "abcde":
    print(char)

现在,您可能已经了解了如何使这些工作正常进行:

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

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

2.获取并排显示的表名

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

您的代码需要重新考虑一下,因为csvwriter并非用于编写列,而是用于编写行。 然后,我们将使用itertools模块的zip_longest函数。 有人会问我为什么不使用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)

注意:此处提供的代码未经测试,可能包含错误。 但是,您应该能够(通过使用我提供的文档)对其进行修复,以使其起作用! 祝好运 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM