欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python操作excel文件與csv文件方法詳解

 更新時間:2023年12月30日 13:26:15   作者:WDLOVELONGLONG  
這篇文章主要介紹了Python操作excel文件與csv文件方法,csv文件可以直接通過excel打開,以行列保存顯示文件,相比與excel來說它只能保存數(shù)據(jù),不能保存公式和函數(shù),然而python處理兩種文件的方式大同小異,感興趣的朋友可以參考下

一、csv文件

csv也叫逗號分隔值文件 —— 每一行內(nèi)容是通過逗號來區(qū)分出不同。

csv文件可以直接通過excel打開。以行列保存顯示文件,相對excel 他只能保存數(shù)據(jù),不能保存公式和函數(shù)

csv.reader(文件對象) —— 獲取文件內(nèi)容,并且以列表為單位返回每一行內(nèi)容

以下示例是CSV文件的寫操作:

with open('data.csv','w',) as csvfile:
    writer = csv.writer(csvfile,delimiter = ' ')
    writer.writerows([['id','name','age'],['10001','Mike',20],['10002','Bob',22],['10003','Jordan',21]])
    writer.writerow(['10004','Long',25])
with open('data.csv','w',) as csvfile:
    fieldnames = ['id','name','age']
    writer = csv.DictWriter(csvfile,fieldnames=fieldnames,delimiter='\t')
    writer.writeheader()
    writer.writerow({'id':'10001','name':'Mike','age':21})
    writer.writerow({'id':'10002','name':'Bob','age':22})
    writer.writerow({'id':'10003','name':'Jordan','age':25})
with open('data.csv','a',encoding='utf-8') as csvfile:
    fieldnames = ['id','name','age']
    writer = csv.DictWriter(csvfile,fieldnames=fieldnames,delimiter='\t')
    writer.writeheader()
    writer.writerow({'id':'10010','name':'小子','age':30})

wirterow方法可以寫入單行,delimiter參數(shù)設(shè)置每列之間的間隙。witerrows方法可以寫入多行。同時若要以字典的形式寫入,則可以使用DictWriter類生成一個對象,然后傳入字典。

csv的讀操作即可使用csv模塊,也可以使用pandas模塊,示例如下:

with open('data.csv','r',encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)
#ctrl + b查看內(nèi)置底層文件代碼
import pandas as pd
df = pd.read_csv('data.csv')
for index, row in df.iterrows():
    print(row.tolist()) #以列表的形式輸出

二、Excel 表格

2.1 讀取excel文件

使用openpyxl的openpyxl.load_workbook方法,可以打開一個excel文件,該方法接受一個文件名,返回一個workbook數(shù)據(jù)類型的值,創(chuàng)建的對象代表這個excle文件:

import openpyxl
workbook = openpyxl.load_workbook('csv.xlsx') #打開一個xlsx文件
print(type(workbook))
得到一個excel文件對象之后,訪問sheetnames屬性可以取得工作簿所有表名的列表,示例:
print(workbook.sheetnames) #得到所有工作表名,返回一個列表
sheet = workbook.sheetnames
print(sheet)

也可以得到活動表,示例如下:

print(workbook.sheetnames) #得到所有工作表名,返回一個列表
sheet = workbook.sheetnames
# print(sheet)
sheet1 = workbook.active #獲取活動表
print(sheet1)
print(sheet1.title)  #獲取活動表,即選中的表的名字

得到sheet對象后,可以按照名字訪問Cell對象,Cell對象的value包含這個單元格的值,row屬性是這個單元格的行數(shù),column是這個單元格的列數(shù),行和列都是從1開始。coordinate屬性是這個單元格名字,如A1

示例如下:

#訪問Cell對象
print(sheet1['D5'])
D5 = sheet1['D5']
print(D5.value)
print(D5.row)
print(D5.column)
print(D5.coordinate)

輸出:
<Cell 'Sheet1'.D5>
0.85242
5
4
D5

如果要輸出多個數(shù)據(jù),可以使用sheet.cell()方法,傳入row參數(shù)和column參數(shù),同樣可以得到一個Cell對象,示例如下:

for i in range(1,10):
    for j in range(1,5):
        print(i,j,":",sheet1.cell(row=i, column=j).value)

如果要輸出所有的數(shù)據(jù),可以通過max_row和max_column屬性來確定表的大小,示例如下:

print(sheet1.max_row,sheet1.max_column)
# for i in range(1,sheet1.max_row + 1):
#     for j in range(1,sheet1.max_column + 1):
#         print(i,j,":",sheet1.cell(row=i, column=j).value)

如果要想列數(shù)轉(zhuǎn)化為字母,則可以調(diào)用openpyxl.utils.get_column_letter()函數(shù),如果要想字母轉(zhuǎn)化為數(shù)字openpyxl.utils.column_index_from_string()函數(shù)

print(openpyxl.utils.get_column_letter(sheet1.max_column))
print(openpyxl.utils.column_index_from_string('AA'))

worksheet對象支持切片,可以取得電子表格中的一行、一列或者一個矩形區(qū)域中的所有Cell對象。然后遍歷這個單元中的所有單元格:

print(list(sheet1['A1':'D5']))
for rowofCellObjects in sheet1['A1':'D5']:
    for cellObject in rowofCellObjects:  #得到每一行的單元格對象
        print(cellObject.coordinate, cellObject.value) #每個單元格對象

如果想要訪問特定行或列的單元格的值,可以使用Worksheet對象的rows和columns屬性,這些屬性必須被list()函數(shù)轉(zhuǎn)化為列表,才能使用方括號和索引,示例如下:

#訪問第二列的值
print(list(sheet1.columns)[2])
for cellObj in list(sheet1.columns)[2]:
    print(cellObj.coordinate, cellObj.value)
#訪問第二行的值
print(list(sheet1.rows)[2])
for cellObj in list(sheet1.rows)[2]:
    print(cellObj.coordinate, cellObj.value)

2.2 寫入excel文件

創(chuàng)建和保存excel文檔,調(diào)用openpyxl.Workbook()函數(shù)以創(chuàng)建一個新的空Workbook對象,示例如下:

import openpyxl
import os
#創(chuàng)建excel文件對象
workbook = openpyxl.Workbook()  #新建工作薄
print(workbook.sheetnames)
os.path.exists('./data2.xlsx') or workbook.save('data2.xlsx')  #不存在則創(chuàng)建

創(chuàng)建和刪除工作表,使用create_sheet()方法可以創(chuàng)建工作表,index參數(shù)指定工作表的位置,title參數(shù)指定工作表的名稱

#創(chuàng)建新的工作表
workbook.create_sheet(index=1, title='sheet2')
print(workbook.sheetnames)
del workbook['sheet2']
print(workbook.sheetnames)
workbook.save('data2.xlsx') 

寫入數(shù)據(jù),像字典一樣,將單元格坐標(biāo)的字符串作為鍵值,用于Worksheet對象,指定要寫入的單元格:

sheet1 = workbook.active
sheet1['A1'] = 'hello world'
workbook.save('data2.xlsx')

也可對單元格對象的value賦值:

sheet1 = workbook.active
sheet1['A1'] = 'hello world'
sheet1.cell(row=1,column=2).value = 'hello world'
sheet1.cell(row=1,column=5).value = 55
workbook.save('data2.xlsx')

注意,使用save方法時不能把data2.xlsx文件打開。

2.3 單元格字體風(fēng)格

為了定義單元格的字體風(fēng)格,需要從openpyxl.styles模塊導(dǎo)入Font()函數(shù)

設(shè)置font的流程如下所示:

import openpyxl
from openpyxl.styles import Font
wrokbook = openpyxl.Workbook()
sheet = wrokbook.active
italic24Font = Font(size=24, italic=False) #創(chuàng)造一種字體風(fēng)格  字號24,斜體
sheet['A1'].font = italic24Font #將這種風(fēng)格用于單元格A1
sheet['A1'] = 'Hello world!'
wrokbook.save('data2.xlsx')

Font style屬性的關(guān)鍵字參數(shù)

name : 字符串 字體名稱,比如“Calibri"或者"Times New Romam"

size : 整形 字號大小

bold : 布爾型 是否粗體

italic : 布爾型 是否斜體

示例:

import openpyxl
from openpyxl.styles import Font
wrokbook = openpyxl.Workbook()
sheet = wrokbook.active
italic24Font = Font(name= 'Times New Roman',bold=True,size=24, italic=True) #創(chuàng)造一種字體風(fēng)格  字號24,斜體
sheet['A1'].font = italic24Font #將這種風(fēng)格用于單元格A1
sheet['A1'] = 'Hello world!'
wrokbook.save('data2.xlsx')

2.4 公式

excel表格中的公式是以一個等號開始,可以配置單元格來讓它包含通過其他單元格計算得到的值。在python中,其操作方法和往excel中寫入數(shù)據(jù)一樣,以某個單元格為鍵值,輸入相應(yīng)的公式

wrokbook = openpyxl.load_workbook('data.xlsx')
sheet = wookbook.active
sheet['D25'] = '=SUM(I2:I23)'
print(sheet['D25'].value)
wrokbook.save('data.xlsx') #保存更改

在excel表中可以看見已經(jīng)寫入的數(shù)據(jù)。

2.5 調(diào)整行和列

Worksheet對象有row_dimensions和column_dimensions屬性,分別用于控制行高和列寬:

wrokbook = openpyxl.Workbook()
sheet = wrokbook.active
sheet['A1'] = 'tall row'
sheet['B2'] = 'wide column'
sheet.row_dimensions[1].height = 70  #設(shè)置列高
sheet.column_dimensions['B'].width = 20  #設(shè)置列寬
wrokbook.save('test.xlsx')

2.6 合并和拆分單元格

利用merge_cells()工作方法,可以將一個矩形區(qū)域中的單元格合并為一個單元格,示例如下:

wrokbook = openpyxl.Workbook()
sheet = wrokbook.active
sheet.merge_cells('A1:D3') #合并表格
sheet['A1'] = 'Twelve cells merged together'
sheet.merge_cells('C5:D5') #
sheet['C5'] = 'Two merged cells'
wrokbook.save('data2.xlsx')

拆分單元格則使用unmerge_cells方法,示例如下:

sheet.unmerge_cells('A1:D3')
sheet.unmerge_cells('C5:D5')
wrokbook.save('data2.xlsx')

2.7 凍結(jié)窗口

對于太大而不能一屏顯示的電子表格,”凍結(jié)“頂部的幾行或最左邊的幾列是非常有幫助的,凍結(jié)之后,就算用戶滾動電子表格,凍結(jié)的列或行表頭也是始終可見的,這稱為”凍結(jié)窗格“。

在openpyxl中,每個Worksheet對象都有一個freeze_panes屬性,該屬性可以設(shè)置為一個Cell對象或一個單元格坐標(biāo)的字符串,需要注意的是,單元格上邊的所有行和左邊的所有列都會凍結(jié),但單元格所在行和列不會凍結(jié)。

要凍結(jié)所有的單元格,就將freeze_panes設(shè)置None或'A1'。

要凍結(jié)窗格的例子:

freeze_panes的設(shè)置 凍結(jié)的行和列

sheet.freeze_panes = 'A2' 行1

sheet.freeze_panes = 'B1' 列A

sheet.freeze_panes = 'C1' 列A和列B

sheet.freeze_panes = 'C2' 行1、列A和列B

sheet.freeze_panes = 'A1' 沒有凍結(jié)框格

sheet.freeze_panes = 'None' 沒有凍結(jié)框格

wrokbook = openpyxl.load_workbook('data2.xlsx')
sheet = wrokbook.active
sheet.freeze_panes = 'A2' #凍結(jié)第一行
wrokbook.save('data2.xlsx')

2.8 圖標(biāo)表

openpyxl支持利用工作表中單元格的數(shù)據(jù)來創(chuàng)建條形圖、折線圖、散點圖和餅圖。創(chuàng)建圖表有以下步驟:

1、從一個矩形區(qū)域選擇單元格來創(chuàng)建一個Reference對象。

2、通過傳入Reference對象來創(chuàng)建一個Series對象

3、創(chuàng)建一個Chart對象。

4、將Series對象添加到Chart對象。

5、可選地設(shè)置Chart對象的drawing.top,drawing.left、drawing.width和drawing.height屬性。

6、將Chart對象添加到Worksheet對象。

Reference對象需要一些解釋。Reference對象是通過調(diào)用openpyxl.charts。Reference()函數(shù)并傳入以下3個參數(shù)來創(chuàng)建的。

1、包含圖表數(shù)據(jù)的Worksheet對象。

2、兩個整數(shù)的元組,代表矩形選擇區(qū)域的左上角單元格,該區(qū)域包含圖表數(shù)據(jù):元組中底一個整數(shù)是行,第二個整數(shù)是列。這里需要注意的是第一行是1而不是0.

3、兩個整數(shù)的元組,代表矩形選擇區(qū)域的右下角單元格,該區(qū)域包含圖表數(shù)據(jù):元組中第一個整數(shù)是行,第二個整數(shù)是列。

workbook = openpyxl.load_workbook('data2.xlsx')
sheet = workbook.active
for i in range(1,11):
    sheet['A' + str(i)] = i #給單元格賦值
#選擇X、Y軸數(shù)據(jù),并創(chuàng)建成一個數(shù)據(jù)系列,這是繪畫散點圖的步驟
xdata=openpyxl.chart.Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)
ydata=openpyxl.chart.Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)
series1=openpyxl.chart.Series(ydata,xdata,title_from_data=False)
series1.marker.symbol = "circle"
# 設(shè)置系列1數(shù)據(jù)點的顏色,以下兩行代碼將其改為紅色
series1.marker.graphicalProperties.solidFill = "FF0000"  # 點的內(nèi)部填充顏色
series1.marker.graphicalProperties.line.solidFill = "FF0000"  # 點的外邊框顏色
# 關(guān)鍵的一步:關(guān)閉系列1數(shù)據(jù)點之間的連接線
series1.graphicalProperties.line.noFill = True
refobj = openpyxl.chart.Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10) # 創(chuàng)建Reference對象
seriesobj = openpyxl.chart.Series(refobj, title = 'First series') #傳入reference對象創(chuàng)建一個series對象
chartobj = openpyxl.chart.BarChart()  #創(chuàng)建chart對象
chartobj.title = '條形圖'  #圖標(biāo)標(biāo)題
#設(shè)置x軸和y軸
chartobj.y_axis.title='Y軸'
chartobj.x_axis.title='X軸'
chartobj.append(seriesobj)  #將series添加到chart對象
#畫一個條形圖
sheet.add_chart(chartobj, 'C5')  #左頂角位于C5
workbook.save('data2.xlsx')
#畫一個折線圖
chartobj = openpyxl.chart.LineChart()  #創(chuàng)建chart對象
chartobj.title = '折線圖'  #圖標(biāo)標(biāo)題
#設(shè)置x軸和y軸
chartobj.y_axis.title='Y軸'
chartobj.x_axis.title='X軸'
chartobj.append(seriesobj)  #將series添加到chart對象
sheet.add_chart(chartobj, 'C20')  #左頂角位于C5
workbook.save('data2.xlsx')
# #畫一個散點圖
chartobj = openpyxl.chart.ScatterChart()  #創(chuàng)建chart對象
chartobj.title = '散點圖'  #圖標(biāo)標(biāo)題
#設(shè)置x軸和y軸
chartobj.y_axis.title='Y軸'
chartobj.x_axis.title='X軸'
chartobj.append(series1)  #將series添加到chart對象
sheet.add_chart(chartobj, 'C35')  #左頂角位于C5
workbook.save('data2.xlsx')
#畫一個餅圖
chartobj = openpyxl.chart.PieChart()  #創(chuàng)建chart對象
chartobj.title = '餅圖'  #圖標(biāo)標(biāo)題
chartobj.append(seriesobj)  #將series添加到chart對象
sheet.add_chart(chartobj, 'C55')  #左頂角位于C5
workbook.save('data2.xlsx')

以上代碼使用了4種方法:

  • BarChart()方法繪畫條形圖。
  • LineChart()方法繪畫折線圖。
  • ScatterChart()方法繪畫散點圖。
  • PieChart()方法繪畫餅圖。

以上就是Python操作excel文件與csv文件方法詳解的詳細內(nèi)容,更多關(guān)于Python操作excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python爬蟲 線程池創(chuàng)建并獲取文件代碼實例

    python爬蟲 線程池創(chuàng)建并獲取文件代碼實例

    這篇文章主要介紹了python爬蟲 線程池創(chuàng)建并獲取文件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Python給文件夾加解密的實現(xiàn)

    Python給文件夾加解密的實現(xiàn)

    數(shù)據(jù)泄露已經(jīng)成為一個嚴重的問題,為了保護用戶和公司的隱私,給文件夾加密已經(jīng)成為一個必要的步驟,本文主要介紹了Python給文件夾加解密的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 報錯No?module?named?numpy問題的解決辦法

    報錯No?module?named?numpy問題的解決辦法

    之前安裝了Python,后來因為練習(xí)使用Python寫科學(xué)計算的東西,又安裝了Anaconda,但是安裝Anaconda之后又出現(xiàn)了一個問題,下面這篇文章主要給大家介紹了關(guān)于報錯No?module?named?numpy問題的解決辦法,需要的朋友可以參考下
    2022-08-08
  • 一篇文章從零開始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項目環(huán)境

    一篇文章從零開始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項目環(huán)境

    在Conda中創(chuàng)建新環(huán)境是一個非常有用的做法,尤其是當(dāng)你需要為不同的項目安裝不同版本的軟件包時,這篇文章主要給大家介紹了關(guān)于從零開始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項目環(huán)境的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Python3爬蟲mitmproxy的安裝步驟

    Python3爬蟲mitmproxy的安裝步驟

    在本篇文章里小編給大家整理的是關(guān)于Python3爬蟲mitmproxy的安裝步驟,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • python實現(xiàn)簡單日期工具類

    python實現(xiàn)簡單日期工具類

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單日期工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 使用OpenCV實現(xiàn)圖像的透視變換功能

    使用OpenCV實現(xiàn)圖像的透視變換功能

    在計算機視覺領(lǐng)域,經(jīng)常需要對圖像進行各種幾何變換,如旋轉(zhuǎn)、縮放和平移等,本文主要介紹了如何使用OpenCV實現(xiàn)圖像的透視變換,需要的可以參考下
    2024-11-11
  • python之Django自動化資產(chǎn)掃描的實現(xiàn)

    python之Django自動化資產(chǎn)掃描的實現(xiàn)

    這篇文章主要介紹了python之Django自動化資產(chǎn)掃描的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python如何定義接口和抽象類

    Python如何定義接口和抽象類

    這篇文章主要介紹了Python如何定義接口和抽象類,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python中的隨機數(shù)種子seed()用法說明

    python中的隨機數(shù)種子seed()用法說明

    這篇文章主要介紹了python中的隨機數(shù)種子seed()用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論