#conding='utf-8'
#屬性方法參考:https://zhuanlan.zhihu.com/p/43186995
#Workbook ;worksheet;active;load_workbook;cell;value;rows;append
"""
workbook對象屬性:
- active:獲取當前活躍的Worksheet
- worksheets:以列表的形式返回所有的Worksheet(表格)
- read_only:判斷是否以read_only模式打開Excel文檔
- encoding:獲取文檔的字符集編碼
- properties:獲取文檔的元數據,如標題,創建者,創建日期等
- sheetnames:獲取工作簿中的表(列表)
workbook對象方法:
- get_sheet_names:獲取所有表格的名稱(新版已經不建議使用,通過Workbook的sheetnames屬性即可獲取) ws = wb["frequency"] == ws2 = wb.get_sheet_by_name('frequency')
- get_sheet_by_name:通過表格名稱獲取Worksheet對象(新版也不建議使用,通過Worksheet[‘表名‘]獲取)
- get_active_sheet:獲取活躍的表格(新版建議通過active屬性獲取)
- remove_sheet:刪除一個表格
- create_sheet:創建一個空的表格
- copy_worksheet:在Workbook內拷貝表格
worksheet對象屬性:
- title:表格的標題
- dimensions:表格的大小,這里的大小是指含有數據的表格的大小,即:左上角的坐標:右下角的坐標
- max_row:表格的最大行
- min_row:表格的最小行
- max_column:表格的最大列
- min_column:表格的最小列
- rows:按行獲取單元格(Cell對象) - 生成器
- columns:按列獲取單元格(Cell對象) - 生成器
- freeze_panes:凍結窗格
- values:按行獲取表格的內容(數據) - 生成器
worksheet對象方法:
- iter_rows:按行獲取所有單元格,內置屬性有(min_row,max_row,min_col,max_col)
- iter_columns:按列獲取所有的單元格
- append:在表格末尾添加數據
- merged_cells:合並多個單元格
- unmerged_cells:移除合並的單元格
Cell對象:
- row:單元格所在的行
- column:單元格坐在的列
- value:單元格的值 返回字符串格式數據,可應用字符串方法
- coordinate:單元格的坐標
"""
import openpyxl
#test1:新建excel #1.創建工作簿
wb=openpyxl.Workbook() #2.找到當前工作簿中處於激活狀態的工作表
ws=wb.active #print(ws) <Worksheet "Sheet"> #也可以使用create_sheet方法 #ws1=wb.create_sheet('工作1') #print(ws1) <Worksheet "工作1">name為工作1的sheet
#3.查看工作表標題文字屬性;也可進行賦值操作
print(ws.title) #"Sheet" #查看當前工作簿下所有工作表名
print(wb.sheetnames) #返回一個列表
#4.操作 #設置某一單元格內容
ws['A1']=41 ws['c1']='姓名' ws.cell(row=7,column=3,value='("python","123456")')
#寫入一行
ws.append([1,2,3,4])
data=[(1,'tom',90), (2,'ham',153), (3,'fs',153), (4,'hha',133) ] ##這里注意寫入數據會在接在上面寫入的位置之后,根據行列的情況繼續向下寫
print('---方法一、寫入一個序列數據--') #通過enumerate獲取index進行數據寫入
for i,row in enumerate(data): for j,col in enumerate(row): ws.cell(row=i+2,column=j+1,value=col) print('----方法二、寫入一個序列數據--------') #(append方法)
for i,row in enumerate(data): ws.append(row) #保存文件
wb.save('test_creat_excel.xlsx') #打開工作簿
wb=openpyxl.load_workbook('case.xlsx') #選擇工作表對象 #a查看所有表名稱
print(wb.sheetnames) #創建表一對象
ws=wb['表一'] #修改表名稱 #ws.title='新建表格1' #print(wb.sheetnames)
#讀取表內信息 #A.cell()方法獲取單元格數據
data =ws.cell(row=5,column=4) #value方法獲得內容,獲取D5的值
print(data,'的值為',data.value)
#通過列表單元格獲取對象同樣返回所有行元組對象
#ws['A1':'C6']
print(ws['A1':'C6'])
"""
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>),
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>),
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>),
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>),
(<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>),
(<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.C6>))
"""
#讀取行列信息返回單行/列元組對象,不具有value屬性 #通過迭代ws.rows方法讀取所有行信息 print('----ws.rows------') row_list=ws.rows for i in row_list: print(i)# (<Cell '表一'.A1>, <Cell '表一'.B1>, <Cell '表一'.C1>, <Cell '表一'.D1>) print('---ws.columns----')
#通過迭代ws.columns方法獲取所有列信息 columns_list=ws.columns for i in columns_list: print(i)
#通過迭代ws.rows方法讀取,讀取第一列value數據
#如:提取第一列數據
import openpyxl
wb=openpyxl.load_workbook('進程.xlsx')
ws=wb.active
for row in ws.rows:
print(row[0].value)
"""
None None 一人之下 None None 完美世界 None 火影忍者 None None 天刀
"""
print('---ws.cell()錯誤用法-----') #這里ws.rows;ws.column都是迭代器,因此沒有len()
"""for r in range(len(row_list)): for c in range(len(columns_list)): print(ws.cell(row=r, column=c).value) """
#通過max_row和max_column的len()方法獲取長度迭代
print('-----方法一、ws.cell().value讀取全部數據---------') for r in range(1,ws.max_row): for c in range(ws.max_column): data=ws.cell(row=r,column=c+1).value #Row or column values must be at least 至少要第二行起
print(data,end='\t') print(end='\n')
print('-----------方法二、已知列數,通過row檢索的方式獲得row.value-----------------------')
for row in ws.rows:
#這里的row[0],指向行元組中對的第一個cell,獲得
print(row[0].value,row[1].value,row[2].value,row[3].value)
#通過enumerate的方式讀取, 所有數據
import openpyxl
wb=openpyxl.load_workbook('test.xlsx')
ws=wb.active
for index,row in enumerate(ws.rows):
for i,col in enumerate(row):
if row[i].value !=None:
print(row[i].value,end='')
print('')
"""
由於最后一行會出現None,為了不打印None故進行了判斷
時間地點人物年齡 44113上海王王12 44173北京智能13 43832東京張三23 44028河北李靜16 43897山西能者18
"""
csv模塊
csv測試數據時,可以以文件形式進行讀寫('r','w')
import csv #寫入 f=open(r'C:\Users\Administrator\Desktop\test.csv','a') cont=csv.writer(f) data=['id','name','age','sex'] #寫入列表數據 cont.writerow(data)f.close()

#寫入元組數據
data2=('1001','小王','20','男')
cont.writerow(data2)
f.close()
#寫入列表集數據
data3=[['1002','小張','20','女'],['1003','小李','19','男'],['1004','小紅','13','男']]
cont.writerows(data3)
f.close()
#注意:打印會出現空行,需要在打開文件時,在open內需要重寫參數newline(newline='')
f=open(r'C:\Users\Administrator\Desktop\test.csv','a',newline='')
cont=csv.writer(f)
data=['id','name','age','sex']
#寫入列表集數據
#writerow 與 writerows的區別
import csv
file=open('csv_test.csv','a',newline='')
writer=csv.writer(file)
data=['test','13','133','44','78']#python中的int類型在寫入csv報錯,變為str即可
#writerow 與writerows的區別
print('----writerow----')
writer.writerow(data)
print('----writerows----')
writer.writerows(data)
#1.使用writerows寫入數據集數據
data3=[['1002','小張','20','女'],['1003','小李','19','男'],['1004','小紅','13','男']]
cont.writerows(data3)
f.close()
#2.使用writerow迭代寫入數據集內單元數據
for i in data3:
cont.writerow(i)
f.close()
#讀取數據
f=open(r'C:\Users\Administrator\Desktop\test.csv','r')
cont=csv.reader(f)
for i in cont:
print(i)
"""
['id', 'name', 'age', 'sex'] ['1002', '小張', '20', '女'] ['1003', '小李', '19', '男'] ['1004', '小紅', '13', '男']
"""
#字典類型數據寫入
datas = [{'name': 'Bob', 'age': 23},{'name': 'Jerry', 'age': 44},{'name': 'Tom', 'age': 15} ]
with open('test_csv_data.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, ['name', 'age'])# 標頭在這里傳入,作為第一行數據
writer.writeheader()
for row in datas:
writer.writerow(row)
# 還可以寫入多行
#writer.writerows(datas)
#字典類型數據讀取
with open('test_csv_data.csv','r') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['name'], row['age'])
"""
Bob 23 Jerry 44 Tom 15
"""