2017-02-16 27 views
0
分隔列

我的代碼是當我CSV寫我如何在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) 我收集表來自這裏的名字。 然後,執行並得到結果。

enter image description here

我的代碼的實際產量.. enter image description here

我的期望是

enter image description here

(不是3列。有2000臺)

我以爲我的代碼接近答案......但它不工作ing .. 我的工作快完成了,但我無法完成這部分。 我幾乎10小時一派.. 我不知道該怎麼..請幫助

我覺得有什麼不對這些部分

for row in result: 
      c.writerow(data_kp[i]) 
      c.writerow(row) 
+0

你能提供一個csv行的例子嗎? –

+3

請顯示輸入,預期輸出和實際輸出(如csv,不是屏幕截圖!)。 – hop

+0

我加入的exaple行 – JsYun

回答

0

csvwriter.writerow方法允許你寫一個在您的輸出csv文件中。這意味着,一旦你調用了writerow方法,該行就會被寫入,而你不能回到它。當你寫代碼:

for row in result: 
    c.writerow(data_kp[i]) 
    c.writerow(row) 

你是在說:

「對於每個結果,編寫包含data_kp[i]然後寫一個包含row一個 線路的線路。」

這樣,一切都將verticaly與交替data_kp[i]row之間寫道。

令人驚訝的是,這不是我們在實際輸出中得到的結果。我認爲你已經改變了一些東西。類似的東西:

c.writerow(data_kp[i]) 
for row in result: 
    c.writerow(row) 

但是,這並不能完全解決您的問題,很明顯:該表的名稱顯示不正確(每列一個字符)和他們沒有並排側。所以你在這裏有兩個問題:

1。在一個單元獲取表的名稱,而不是分裂

首先,讓我們來看看關於csvwriter文檔:

行必須是字符串或數字爲作家的迭代對象

但是您的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) 

注: 這裏提供的代碼沒有經過測試,並可能包含錯誤。儘管如此,你應該能夠(通過使用我提供的文檔)來修復它,以使其工作!祝你好運:)