我的代码是
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张桌子)
我认为我的代码接近答案......但它不起作用.. 我的工作差不多完成了,但我无法完成这部分工作。 我用Google搜索了近10个小时.. 我不知道如何......请帮忙
我认为这些部分有问题
for row in result:
c.writerow(data_kp[i])
c.writerow(row)
答案 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())
注意:强> 此处提供的代码尚未经过测试,可能包含错误。不过,您应该能够(使用我提供的文档)修复它以使其正常工作!祝你好运:)