2011-04-18 89 views
17

我有幾個CSV文件,我想在一個Excel工作簿(XLS/XLSX)轉儲作爲新的工作表。 我該如何做到這一點?蟒蛇:創建Excel工作簿和傾銷CSV文件作爲工作表

使用谷歌搜索並找到'pyXLwriter',但似乎該項目已停止。 雖然我試着'pyXLwriter'想知道是否有任何替代品/建議/模塊?

很多謝謝。

[編輯]

這裏是我的解決方案:(任何人有更爲精簡,許多Python的解決辦法做評論THX?)

import glob 
import csv 
import xlwt 
import os 

wb = xlwt.Workbook() 


for filename in glob.glob("c:/xxx/*.csv"): 
    (f_path, f_name) = os.path.split(filename) 
    (f_short_name, f_extension) = os.path.splitext(f_name) 
    ws = wb.add_sheet(str(f_short_name)) 
    spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"') 
    row_count = 0 
    for row in spamReader: 
     for col in range(len(row)): 
      ws.write(row_count,col,row[col]) 
     row_count +=1 

wb.save("c:/xxx/compiled.xls") 

print "Done" 
+0

注意。 Xlwt將輸入數量限制爲65,556。但是,如果你有更多的行數,請嘗試xlsxwriter – 2017-07-20 18:04:34

+0

嘗試Sikuli。這是一個Jython項目,但您可以使用它來自動執行任何GUI任務。 – Patrick 2011-04-18 15:58:32

回答

27

不知道什麼通過「更爲精簡,Python的很多」的意思,但你肯定會美化它一點:

import glob, csv, xlwt, os 
wb = xlwt.Workbook() 
for filename in glob.glob("c:/xxx/*.csv"): 
    (f_path, f_name) = os.path.split(filename) 
    (f_short_name, f_extension) = os.path.splitext(f_name) 
    ws = wb.add_sheet(f_short_name) 
    spamReader = csv.reader(open(filename, 'rb')) 
    for rowx, row in enumerate(spamReader): 
     for colx, value in enumerate(row): 
      ws.write(rowx, colx, value) 
wb.save("c:/xxx/compiled.xls") 
3

我永遠只是通過串寫了Office 2003的XML格式。與編寫和壓縮構成xlsx文檔的內容相比,這很容易實現,而且更容易管理。它也不需要任何外部庫。 (雖然人們可以輕鬆推出自己的產品)

另外,Excel支持加載CSV文件。空格分隔或字符分隔。你可以直接加載它,或者嘗試複製&粘貼它,然後按下選項中的文本到列按鈕。當然,這個選項與python無關。

+0

謝謝..但不是如果我有20多個csv,我將打開一個接一個,做剪切和粘貼..嘿嘿:) – siva 2011-04-18 16:23:51

+0

要獲得一個空白的模板文件,我可以玩,我打開Excel,進入測試在A1中,然後使用保存爲空白電子表格,選擇XML Spreadsheet 2003作爲文件類型,然後爲其命名。當你看到它的XML結構時,你會知道該怎麼做。 – adorablepuppy 2011-04-18 16:30:50

+0

這聽起來很有趣! – Sergio 2011-04-18 23:07:47

12

您會在此xlwt tutorial中找到所有您需要的。這個庫(xlrd and xlwt)是管理Python中Excel交互的最流行的選擇。缺點是,目前他們只支持Excel二進制格式(.xls)。

+0

是啊,看這個教程pdf。一個想法點擊,我可以創建一個xls文件與許多工作表,並使用python csv閱讀器模塊/方法逐行轉儲到工作表。 :) – siva 2011-04-18 16:36:05

+0

是的,這幾乎是這個想法。我建議你在需要時創建表格,而不是事先。 – Sergio 2011-04-18 16:48:38

+5

xlwt教程鏈接已損壞 – 2014-03-24 19:07:38

3

另外在GitHub庫「Kampfmitexcel」可......

import csv, xlwt, os 

def input_from_user(prompt): 
    return raw_input(prompt).strip() 

def make_an_excel_file_from_all_the_txtfiles_in_the_following_directory(directory): 
    wb = xlwt.Workbook() 
    for filename in os.listdir(data_folder_path): 
     if filename.endswith(".csv") or filename.endswith(".txt"): 
      ws = wb.add_sheet(os.path.splitext(filename)[0]) 
      with open('{}\\{}'.format(data_folder_path,filename),'rb') as csvfile: 
       reader = csv.reader(csvfile, delimiter=',') 
       for rowx, row in enumerate(reader): 
        for colx, value in enumerate(row): 
         ws.write(rowx, colx, value) 
    return wb 

if __name__ == '__main__': 
    path_to_data = input_from_user("Where is the data stored?: ") 
    xls = make_an_excel_file_from_all_the_txtfiles_in_the_following_directory(path_to_data) 
    xls_name = input_from_user('What do you want to name the excel file?: ') 
    xls.save('{}\\{}{}'.format(data_folder_path,xls_name,'.xls')) 
    print "Your file has been saved in the data folder." 
3

使用xlsxwriter創建並寫入python中的excel文件。

由安裝:安裝PIP xlsxwriter

import xlsxwriter 


# Create an new Excel file and add a worksheet. 
workbook = xlsxwriter.Workbook('demo.xlsx') 
worksheet = workbook.add_worksheet() 

# Widen the first column to make the text clearer. 
worksheet.set_column('A:A', 20) 

# Add a bold format to use to highlight cells. 
bold = workbook.add_format({'bold': True}) 

# Write some simple text. 
worksheet.write('A1', 'Hello') 

# Text with formatting. 
worksheet.write('A2', 'World', bold) 

# Write some numbers, with row/column notation. 
worksheet.write(2, 0, 123) 
worksheet.write(3, 0, 123.456) 

# Insert an image. 
worksheet.insert_image('B5', 'logo.png') 

workbook.close() 
1

這是立足於回答你的答案本身。但是我使用xlsxwriter的原因是,它接受xlsx格式的更多數據。由於xlwt限制你以65556行和xls格式。

import xlsxwriter 
import glob 
import csv 
workbook = xlsxwriter.Workbook('compiled.xlsx') 
for filename in glob.glob("*.csv"): 
    ws = workbook.add_worksheet(str(filename.split('.')[0])) 
    spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"') 
    row_count = 0 
    print filename 
    for row in spamReader: 
     for col in range(len(row)): 
      ws.write(row_count,col,row[col]) 
     row_count +=1 

workbook.close()