我在Linux Mint上使用Python 3.4。 SQL语句将DB数据返回到长列表中。我可以很好地遍历列表,但需要正确格式化输出。我可以在列表中设置一个分隔符,例如'@'表示行数据的结尾,但我不知道如何从列表中一次读回1行数据('@'表示结束行)。使用split()尝试但列表中的数据是混合的,整数值和字符串,因此split()失败。请帮忙!
loop = 1
for data in orders: #loop all values returned (main loop)
#loop 1, set dupe-check variable
if data[0] not in cdupes:
cdupes.append(data[0]) #store customer name for next loop
if loop > 1:
rowdata.append("@")
for val in range(0, 4): #sql always returns 4 columns per row
rowdata.append(data[val]) #name, id, productline, ordertotal
#if customer name is a duplicate, append remaining customer productlines data
elif data[0] in cdupes: #customer name [0] in cdupes
for val in range(2, 4):
rowdata.append(data[val]) #store id, productline, ordertotal
loop += 1
print(rowdata)
答案 0 :(得分:0)
我不确定我的问题是否清楚,但无论如何我已经解决了这个问题。我的SQL语句将返回customernames,customerid,productlines和productlinettls,即每个客户的每个产品线的总订单。问题是SQL每个客户返回多行,因为每个客户可能有多个产品线。例如...
Alpha Cognac 242 Classic Cars 173998.00
Alpha Cognac 242 Planes 16655.22
Alpha Cognac 242船舶18279.26
Alpha Cognac 242 Vintage Cars 8250.30
每一行都存储在list []中,我需要删除重复的客户名称+ ID并将所有值存储在1 col / row(每个cust)格式中,并将0.00放在没有productline值的情况下:
示例强>:
CustName ID Cl汽车自行车飞机火车船卡车和公共汽车老爷车
Alpha Cognac 242 173998.00 0.00 16655.22 0.00 18279.26 0.00 8250.30
我上面发布的代码会删除重复的custnames + ID,并将数据重组为1个唯一的行,但没有缺少的列(即自行车,火车等)。
由于某些产品系列没有值,我需要插入这些值。我使用listcomparator来获取productline值在唯一行中的位置索引 例: productlines = [' Classic Cars'' Bikes'' Planes',' Trains'' Ships',& #39; Trucks& Buses',' Vintage',' Cars']
for x in range(0, len(productlines):
try
idx = rowdata.index(productlinelines[]) #give me the index of productline if found
except ValueError:
row.append(format(0.00, '.2f')) #insert 0.00 if no productline in unique row
else:
row.append(format(rowdata[idx+1], '.2f')) #grab the value of the productline line and insert into correct column & format to 2 decimal
这只是我用来解决此问题的功能的摘录。我希望这个想法可以帮助别人,但我相信还有其他方法可以做到这一点。我对Python很陌生。