2014-10-07 76 views
-1

我在Linux Mint上使用Python 3.4。 SQL語句以長列表形式返回DB數據。我可以循環遍歷列表,但需要正確格式化輸出。我可以在列表中設置一個分隔符,比如'@'來表示行數據的結尾,但是我不知道如何從列表中每次讀取一行數據('@'表示結束行)。嘗試使用split()但列表中的數據是混合的整數值和字符串,所以split()失敗。請幫忙!Python使用分隔符分割整數和字符串(混合)列表?

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

請告訴您希望輸出什麼類型。 – 2014-10-07 14:39:44

+0

爲什麼你需要讀回輸出?如果不打印給用戶,可以使用[json](https://docs.python.org/3/library/json.html)等。 – parchment 2014-10-07 14:51:03

+0

由於我還不能發佈圖片,因此這裏是我需要的輸出鏈接http://genesis.kennesaw.edu/python_output.jpg。我需要閱讀列表中代表數據行的部分,以便我可以操縱數據輸出以看起來像從鏈接中看到的內容。與PyCharm列表輸出的另一個鏈接http://genesis.kennesaw.edu/PythonList-with-Delimiter.jpg – maestro2mil 2014-10-07 15:22:52

回答

0

我不知道我的問題是否清楚,但我已經解決了這個問題。我的SQL語句將返回客戶名稱,客戶名稱,產品線和產品線,即每個客戶每個產品線的總訂單數。問題在於SQL爲每個客戶返回多行,因爲每個客戶可能有多個產品線。實施例...
阿爾法白蘭地242經典汽車173998.00
阿爾法白蘭地242架飛機16655.22
阿爾法白蘭地242個船舶18279.26
阿爾法白蘭地242老式汽車8250.30

每一行正在存儲在列表中[]和我需要刪除重複的客戶名稱+ ID和所有的值存儲在一個1個COL /行(每CUST)格式,並把0.00其中用於PRODUCTLINE沒有值:


的CustName ID氯汽車自行車飛機火車船舶卡車&公共汽車老爺車
阿爾法干邑242 173998.00 0.00 16655.22 0.00 18279.26 0.00 8250.30

我上面貼會刪除重複的custnames + IDS和重構的代碼數據到1個唯一行,但沒有丟失列(即。自行車,火車等)。

由於沒有可用於某些產品線的值,因此需要插入這些值。我使用了一個listcomparator來獲取產品線值在唯一行中的位置的索引。
示例: 代理產品= [ '經典汽車', '自行車', '飛機', '火車', '船', '貨車&公共汽車', '老式', '汽車']

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很陌生。