2012-02-24 142 views
1

我使用XLWT從.csv編寫excel文件,並將csv中的第一列作爲行的樣式。我該如何開始寫入每行第二列開始的值(如不打印出值,例如「headerStyle」)?我嘗試了幾種不同的方式,比如創建一個col_count,但沒有任何運氣。Python Excel從csv開始在第二列寫入值

row_count = 0 
style = rowStyle 

#Read each row and write to sheet 
for row in csv_input: 
     #Iterate through each column 
     for col in range(len(row)): 
      if col == 0: 
       style = row[col] 
      else: 
       if(is_number(row[col]) == True): 
        sheet.write(row_count,col,float(row[col]),style) 
       else: 
        sheet.write(row_count,col,row[col],style) 

     #Increment row_count 
     row_count += 1 

任何幫助表示讚賞!謝謝!

我最終搞清楚了。任何有興趣,一個問題是,風格回來了作爲一個字符串,所以我創建了一個函數來解決這個問題:

def assign_style(string): 
    if string=='headerStyle': 
     style = headerStyle 
     return style 

然後通過同時跳過第一列下面將循環:

row_count = 0 

#Read each row and write to sheet 
for row in csv_input: 
     #Iterate through each column 
     for col in range(len(row)): 
      if col == 0: 
       style = assign_style(row[col]) 
      elif(is_number(row[col]) == True): 
       sheet.write(row_count,col-1,float(row[col]),style) 
      else: 
       sheet.write(row_count,col-1,row[col],style)  
     #Increment row_count 
     row_count += 1 
+0

您使用您發佈的代碼獲得的輸出是什麼?另外,請記住,sheet.write是0索引的,所以在您的代碼中,CSV中的第二列(即第一列數據)將寫入電子表格的B列。 – bouteillebleu 2012-02-24 14:17:59

+1

你說得對,我在sheet.write語句中做了col-1。我想通了,如果你有興趣,解決方案就在上面。謝謝! – ad2387 2012-02-24 15:23:28

+0

這個問題顯然是從你以前的問題後續http://stackoverflow.com/questions/9414521/how-do-i-apply-a-style-to-the-whole-row-using-xlwt-python -excel ...你目前的解決方案是預先計算要使用的風格並將其寫入你的csv文件,這是令人驚訝的混亂。看到我對你以前的問題的答案。 – 2012-03-03 21:33:20

回答

0

使用iter()。另外,不要遍歷range()。請使用enumerate()。並使用三元運算符,它有助於保持DRY:

for row_count, row in enumerate(csv_input): 
    columns = iter(row) 
    style = next(columns) 
    for col_count, col in enumerate(columns, start=1): 
     sheet.write(
      row_count, 
      col_count, 
      float(col) if is_number(col) else col, 
      style 
     ) 
+1

感謝您的回覆。我最終以不同的方式做了這件事,但你看起來很有希望。我將來可以使用的東西! – ad2387 2012-02-24 15:21:54