1. 程式人生 > >python 處理excel檔案、txt檔案

python 處理excel檔案、txt檔案

處理excel檔案的python庫有很多,如xlsxwriter、xlrd、openpyxl等。由於經常用pandas處理資料,而且pandas讀寫excel更方便,所以主要講pandas是如何操作excel的。也介紹瞭如何分別使用用xlsxwriter和openpyxl向excel中插入圖片,如何在不覆蓋原excel的基礎上追加新的內容。

1 生成excel檔案

建立工作簿 => 將資料寫入sheet表中 => 儲存資料

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None
, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None) ''' 該函式主要引數為:excel_writer。 excel_writer:寫入的目標excel檔案,可以是檔案路徑、ExcelWriter物件; sheet_name:被寫入的sheet名稱,string型別,預設為'sheet1'; engine:也很重要,可以與openpyxl庫對接。 na_rep:缺失值表示,string型別; header:是否寫表頭資訊,布林或list of string型別,預設為True; index:是否寫行號,布林型別,預設為True; encoding:指定寫入編碼,string型別。 '''
import pandas as pd writer = pd.ExcelWriter(path) #path為工作簿的路徑和名稱 data.to_excel(writer, 'sheet1') #sheet1為工作表的名稱, data為DataFrame資料 writer.save()#儲存資料的步驟不能少

2 讀取excel檔案

有兩種方式讀取excel:
(1)pd.read_excel()

pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None
, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds) ''' 該函式主要的引數為io、sheetname、header、names、encoding。 io:excel檔案,可以是檔案路徑、檔案網址、file-like物件、xlrd workbook; sheetname:返回指定的sheet,引數可以是字串(sheet名)、整型(sheet索引)、list(元素為字串和整型,返回字典{'key':'sheet'})、none(返回字典,全部sheet); header:指定資料表的表頭,引數可以是int、list of ints,即為索引行數為表頭; names:返回指定name的列,引數為array-like物件。 encoding:關鍵字引數,指定以何種編碼讀取。 該函式返回pandas中的DataFrame或dict of DataFrame物件,利用DataFrame的相關操作即可讀取相應的資料。 ''' data = pd.read_excel('excel檔案的路徑和名稱') print(data)

(2)讀取工作簿 => 讀取sheet表中的資料

import pandas as pd
writer = pd.ExcelFile(path) #path為工作簿的路徑和名稱.注意是pd.ExcelFile, 不是pd.ExcelWriter
data2 = writer.parse('sheet1') #讀取名為sheet1的表格,data2為DataFrame
print(data2)

3 xlsxwriter處理excel(向excel中插入圖片)

內容豐富,包括用excel作圖,向excel中插入圖片等。
在工作中需要向excel中插入圖片,查了一下資料,遇到一個問題。

import xlsxwriter
work_book=xlsxwriter.Workbook(PATH)
sheet_1 = work_book.add_worksheet("sheet1")
sheet_1.insert_image('A1','圖片.jpg')#可以用png格式
workbook.close()

4 在已有的工作簿中追加新的工作表,但不覆蓋以前的內容。

方法一

原工作簿中不能含有圖片,否則追加新的sheet後,圖片會消失。

import openpyxl
import pandas as pd
from pandas import DataFrame
data = DataFrame([{"a":2, "b":3}, {"a":4, "b":5}])
work_book = openpyxl.load_workbook('D:\\work\\loan_rules\\rules_loan_2018-03-06\\2018-03-06.xlsx')  # 這是原有的工作簿
writer = pd.ExcelWriter('D:\\work\\loan_rules\\rules_loan_2018-03-06\\2018-03-06.xlsx', engine='openpyxl')  # 新建一個同路徑同名的工作簿,關鍵要指定engine='openpyxl'
writer.book = work_book # 將讀取的原工作簿賦值給新的工作簿writer
writer.sheets = dict((ws.title, ws) for ws in work_book.worksheets) # 原工作簿中的所有表格也要賦值過去
#[print(ws.title) for ws in work_book.worksheets]#可以檢視一下有哪些表格
data.to_excel(writer, sheet_name='yj_new')  # 將data資料儲存到新工作簿中的新建的sheet中
writer.save()# 新工作簿writer覆蓋原工作簿work_book
方法二

如果原工作簿中含有圖片,即使追加了新資料, 雖然原有的sheet不會消失,但原sheet中的圖片會消失。所以可以先寫入資料,再用openpyxl追加圖片。

import openpyxl
work_book = openpyxl.load_workbook('D:\\work\\loan_rules\\rules_loan_2018-03-07\\2018-03-07.xlsx')  # 這是現有的工作簿,只有sheet1表
    for image_name in ["貸前規則隨時間變化拆線圖", "貸中規則隨時間變化拆線圖", "貸前規則柱狀圖", "貸中規則柱狀圖"]:
        img = openpyxl.drawing.image.Image(PATH_2 + '\\' + image_name + '.png')#提取圖片,轉化後再用add_image新增。
        work_book.create_sheet(title=image_name).add_image(img, 'A1')#create_sheet建立新表格

處理txt檔案

data = pd.read_table(path, header=0, encoding='utf-8', sep=分隔符, names=列名)
data = pd.read_table('D:\\work\\15.txt', header=0, encoding='utf-8', sep='\t', names=['借款id','姓名','身份證'])
#路徑名和檔名儘量不要用中文名
#如果列名太多了,從txt檔案中複製所有列名,放在字條串s中,並用s.split()轉化成列表,就不用給列名單獨加上引號。

處理csv檔案

如果生成的csv檔案無法被excel開啟怎麼辦?

data.to_csv('D:\\work\\15.csv',  sep=',',  encoding='gbk')

請使用逗號作分隔符,並且使用gbk作為編碼方式
更多內容,請參考:
python用openpyxl操作excel