openpyxl/csv--python處理excel表格模塊


#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

"""

 

 

  1.  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM