【python Excel】pythonを使用して大量のデータをExcelにエクスポートする方法のヒントの1つ
pythonを使用して大量のデータをExcelにエクスポートする方法のヒント
(1)問題説明:データをよりよく表示するために、Excel形式のデータファイルはテキストファイルよりも優れていることが多いが、pythonでは、どのようにしてExcelにデータをエクスポートすればよいのだろうか.大量のデータをエクスポートする必要がある場合は、どのように操作しますか?本文は主に以上の2つの問題を解決する.
(2)具体的な手順は以下の通りである.
1.最初にopenpyxlをインストールし、
pip install openpyxlを使用すればいいですが、windowsの下にインストールされているのは2.2.6バージョンですが、centosが自動的にインストールされているのは4.1バージョンです(ハイゴの注意に感謝します).
書くコードはwindowsの下で運行して問題がなくて、しかしcentosの上で間違いを報告して、ew=ExcelWriter(workbook=wb)が少なく1つのパラメータを提供すると言って、そこで断固として237サーバーの上で私はすでに2.2.6バージョンをインストールして、問題は解決します.
pip install openpyxl==2.2.6
2.第2歩、ははは、いいえ、くだらないことは言わないで、直接コードに行って、ps、コードの中でxlwtとopenpyxlの2つの実現バージョンを含みます.
(3)拡張読書:資料を調べることで、ネット上では諸説あることがわかり、まとめると以下の点があります. python Excel関連操作のmodule libには、xlrd、xlwt、xlutilsの2つのグループがあり、openpyxlの2つのグループがあります. しかし、前のグループ(xlrd,xlwt)は比較的古いので、Excel 97-2003またはExcel 97以前のバージョンで生成されたxls形式のexcelファイルしか処理できません.xlwtは07版以降のexcelもサポートされていません.この形式のexcelファイルは一般的に256列または65536行のexcelファイルしかサポートできません. そのため、excelに大量のデータをエクスポートする必要がある場合は、次の3つの選択肢があります.1)CSVファイルとして保存するなどのストレージフォーマットを変更します.openpyxlを使用します.Excel 2007+xlsx/xlsm formatの処理をサポートするためです.3)win 32 COM(Windows only) もちろん、私たちは困難に直面しなければなりません.製品とユーザーにデータをよりよく示すために、私たちは依然として2つ目を選択しています.
ps、とてもlucky、検索した后に私はopenpyxlを探し当てて、07+のexcelを支持して、ずっと人がメンテナンスして、ドキュメントははっきりしていて読みやすくて、TutorialとAPIのドキュメントを参照してすぐに手に入れることができて、それです~
【20180713 add ps、以下のコードはopenpyxlの__version_='2.2.6'とopenpyxlの__version_='2.4.8'でテストに合格しました.openpyxlの最新バージョンは__version_='2.5.4'であることを考慮して、最新バージョンのpython操作excelの例が必要な場合は、別のブロガーを参照してください.アドレス:リンクを開くをクリックしてください.】
(4)余計なことは言わないで、直接コードをつけて、参考にしてください
(1)問題説明:データをよりよく表示するために、Excel形式のデータファイルはテキストファイルよりも優れていることが多いが、pythonでは、どのようにしてExcelにデータをエクスポートすればよいのだろうか.大量のデータをエクスポートする必要がある場合は、どのように操作しますか?本文は主に以上の2つの問題を解決する.
(2)具体的な手順は以下の通りである.
1.最初にopenpyxlをインストールし、
pip install openpyxlを使用すればいいですが、windowsの下にインストールされているのは2.2.6バージョンですが、centosが自動的にインストールされているのは4.1バージョンです(ハイゴの注意に感謝します).
書くコードはwindowsの下で運行して問題がなくて、しかしcentosの上で間違いを報告して、ew=ExcelWriter(workbook=wb)が少なく1つのパラメータを提供すると言って、そこで断固として237サーバーの上で私はすでに2.2.6バージョンをインストールして、問題は解決します.
pip install openpyxl==2.2.6
2.第2歩、ははは、いいえ、くだらないことは言わないで、直接コードに行って、ps、コードの中でxlwtとopenpyxlの2つの実現バージョンを含みます.
(3)拡張読書:資料を調べることで、ネット上では諸説あることがわかり、まとめると以下の点があります.
ps、とてもlucky、検索した后に私はopenpyxlを探し当てて、07+のexcelを支持して、ずっと人がメンテナンスして、ドキュメントははっきりしていて読みやすくて、TutorialとAPIのドキュメントを参照してすぐに手に入れることができて、それです~
【20180713 add ps、以下のコードはopenpyxlの__version_='2.2.6'とopenpyxlの__version_='2.4.8'でテストに合格しました.openpyxlの最新バージョンは__version_='2.5.4'であることを考慮して、最新バージョンのpython操作excelの例が必要な場合は、別のブロガーを参照してください.アドレス:リンクを開くをクリックしてください.】
(4)余計なことは言わないで、直接コードをつけて、参考にしてください
# coding:utf-8
'''
# ,
create by yaoyz
date: 2017/01/24
'''
import xlrd
import xlwt
# workbook
from openpyxl.workbook import Workbook
# ExcelWriter, excel
from openpyxl.writer.excel import ExcelWriter
# eggache
from openpyxl.utils import get_column_letter
from openpyxl.reader.excel import load_workbook
class HandleExcel():
'''Excel '''
def __init__(self):
self. head_row_labels = [u' ID',u' ',u' ',u' ID',u' ']
"""
function:
txt , list
Param:
filename:
Return:
res_list: list
"""
def read_from_file(self,filename):
res_list=[]
file_obj=open(filename,"r")
for line in file_obj.readlines():
res_list.append(line)
file_obj.close()
return res_list
"""
function:
*.xlsx , data_dic
Param:
excel_name:
Return:
data_dic: dict
"""
def read_excel_with_openpyxl(self, excel_name="testexcel2007.xlsx"):
# excel2007
wb = load_workbook(filename=excel_name)
#
print "Worksheet range(s):" , wb.get_named_ranges()
print "Worksheet name(s):" , wb.get_sheet_names()
#
sheetnames = wb.get_sheet_names()
ws = wb.get_sheet_by_name(sheetnames[0])
# , ,
print "Work Sheet Titile:" ,ws.title
print "Work Sheet Rows:" ,ws.get_highest_row()
print "Work Sheet Cols:" ,ws.get_highest_column()
# excel ,
row_num=ws.get_highest_row()
col_num=ws.get_highest_column()
print "row_num: ",row_num," col_num: ",col_num
#
data_dic = {}
sign=1
#
for row in ws.rows:
temp_list=[]
# print "row",row
for cell in row:
print cell.value,
temp_list.append(cell.value)
print ""
data_dic[sign]=temp_list
sign+=1
print data_dic
return data_dic
"""
function:
*.xlsx , data_dic
Param:
records: , list
save_excel_name:
head_row_stu_arrive_star:
Return:
data_dic: dict
"""
def write_to_excel_with_openpyxl(self,records,head_row,save_excel_name="save.xlsx"):
# workbook
wb = Workbook()
# excelWriter
ew = ExcelWriter(workbook=wb)
#
dest_filename = save_excel_name.decode('utf-8')
# sheet ws
ws = wb.worksheets[0]
# ws
ws.title = "range names"
# ,
for h_x in range(1,len(head_row)+1):
h_col=get_column_letter(h_x)
#print h_col
ws.cell('%s%s' % (h_col, 1)).value = '%s' % (head_row[h_x-1])
#
i = 2
for record in records:
record_list=str(record).strip().split("\t")
for x in range(1,len(record_list)+1):
col = get_column_letter(x)
ws.cell('%s%s' % (col, i)).value = '%s' % (record_list[x-1].decode('utf-8'))
i += 1
#
ew.save(filename=dest_filename)
"""
function:
Excel
Excel
Param:
excel_name: Excel
Return:
"""
def read_excel(self,excel_name):
workbook=xlrd.open_workbook(excel_name)
print workbook.sheet_names()
# sheet
print workbook.sheet_names() # [u'sheet1', u'sheet2']
sheet2_name = workbook.sheet_names()[1]
# sheet sheet
sheet2 = workbook.sheet_by_index(1) # sheet 0
sheet2 = workbook.sheet_by_name('Sheet1')
# sheet , ,
print sheet2.name,sheet2.nrows,sheet2.ncols
# ( )
rows = sheet2.row_values(3) #
cols = sheet2.col_values(2) #
print rows
print cols
#
print sheet2.cell(1,0).value
print sheet2.cell_value(1,0)
print sheet2.row(1)[0].value
#
print sheet2.cell(1,0).ctype
#
return workbook.sheet_by_name(u'Sheet1')
"""
function:
Param:
name:
height:
bold:
Return:
style:
"""
def set_style(self,name,height,bold=False):
style = xlwt.XFStyle() #
font = xlwt.Font() #
font.name = name # 'Times New Roman'
font.bold = bold
font.color_index = 4
font.height = height
borders= xlwt.Borders()
borders.left= 6
borders.right= 6
borders.top= 6
borders.bottom= 6
style.font = font
style.borders = borders
return style
"""
function:
txt Excel
Param:
dataset: ,list
Return:
excel
"""
def write_to_excel(self, dataset,save_excel_name,head_row):
f = xlwt.Workbook() #
# sheet:
# sheet1
count=1
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # sheet
# :
for p in range(len(head_row)):
sheet1.write(0,p,head_row[p],self.set_style('Times New Roman',250,True))
default=self.set_style('Times New Roman',200,False) # define style out the loop will work
for line in dataset:
row_list=str(line).strip("
").split("\t")
for pp in range(len(str(line).strip("
").split("\t"))):
sheet1.write(count,pp,row_list[pp].decode('utf-8'),default)
count+=1
f.save(save_excel_name) #
def run_main_save_to_excel_with_openpyxl(self):
print " 2007 excel xlsx, "
print "1. txt , list "
dataset_list=self.read_from_file("test_excel.txt")
'''test use openpyxl to handle EXCEL 2007'''
print "2. Excel "
head_row_label=self.head_row_labels
save_name="test_openpyxl.xlsx"
self.write_to_excel_with_openpyxl(dataset_list,head_row_label,save_name)
print "3. , txt Excel "
def run_main_save_to_excel_with_xlwt(self):
print " 4. txt , list "
dataset_list=self.read_from_file("test_excel.txt")
'''test use xlwt to handle EXCEL 97-2003'''
print " 5. Excel "
head_row_label=self.head_row_labels
save_name="test_xlwt.xls"
self.write_to_excel_with_openpyxl(dataset_list,head_row_label,save_name)
print "6. , txt Excel "
if __name__ == '__main__':
print "create handle Excel Object"
obj_handle_excel=HandleExcel()
# openpyxl xlwt
obj_handle_excel.run_main_save_to_excel_with_openpyxl()
obj_handle_excel.run_main_save_to_excel_with_xlwt()
''' , openpyxl xls ,xlrd xlsx '''
#obj_handle_excel.read_excel_with_openpyxl("testexcel2003.xls") #
#obj_handle_excel.read_excel_with_openpyxl("testexcel2003.xls") #
obj_handle_excel.read_excel("testexcel2003.xls")
obj_handle_excel.read_excel_with_openpyxl("testexcel2007.xlsx")