在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