大數據處理經常要用到一堆表格,然後需要把數據導入一個list中進行各種演算法分析,簡單講一下自己的做法:
1.如何讀取excel文件
網上的版本很多,在xlrd模塊基礎上,找到一些源碼:
[python]view plain
importxdrlib,sys
importxlrd
defopen_excel(file="C:/Users/flyminer/Desktop/新建MicrosoftExcel工作表.xlsx"):
data=xlrd.open_workbook(file)
returndata
#根據索引獲取Excel表格中的數據參數:file:Excel文件路徑colnameindex:表頭列名所在行的所以,by_index:表的索引
defexcel_table_byindex(file="C:/Users/flyminer/Desktop/新建MicrosoftExcel工作表.xlsx",colnameindex=0,by_index=0):
data=open_excel(file)
table=data.sheets()[by_index]
nrows=table.nrows#行數
ncols=table.ncols#列數
colnames=table.row_values(colnameindex)#某一行數據
list=[]
forrownuminrange(1,nrows):
row=table.row_values(rownum)
ifrow:
app={}
foriinrange(len(colnames)):
app[colnames[i]]=row[i]
list.append(app)
returnlist
#根據名稱獲取Excel表格中的數據參數:file:Excel文件路徑colnameindex:表頭列名所在行的所以,by_name:Sheet1名稱
defexcel_table_byname(file="C:/Users/flyminer/Desktop/新建MicrosoftExcel工作表.xlsx",colnameindex=0,by_name=u'Sheet1'):
data=open_excel(file)
table=data.sheet_by_name(by_name)
nrows=table.nrows#行數
colnames=table.row_values(colnameindex)#某一行數據
list=[]
forrownuminrange(1,nrows):
row=table.row_values(rownum)
ifrow:
app={}
foriinrange(len(colnames)):
app[colnames[i]]=row[i]
list.append(app)
returnlist
defmain():
tables=excel_table_byindex()
forrowintables:
print(row)
tables=excel_table_byname()
forrowintables:
print(row)
if__name__=="__main__":
main()
最後一句讓代碼里的函數都可以被復用,簡單地說:假設文件名是a,在程序中import a以後,就可以用a.excel_table_byname()和a.excel_table_byindex()這兩個超級好用的函數了。
2.然後是遍歷文件夾取得excel文件以及路徑:,原創代碼如下:
[python]view plain
importos
importxlrd
importtest_wy
xpath="E:/唐偉捷/電力/電力系統總文件夾/舟山電力"
xtype="xlsx"
typedata=[]
name=[]
raw_data=[]
file_path=[]
defcollect_xls(list_collect,type1):
#取得列表中所有的type文件
foreach_elementinlist_collect:
ifisinstance(each_element,list):
collect_xls(each_element,type1)
elifeach_element.endswith(type1):
typedata.insert(0,each_element)
returntypedata
#讀取所有文件夾中的xls文件
defread_xls(path,type2):
#遍歷路徑文件夾
forfileinos.walk(path):
foreach_listinfile[2]:
file_path=file[0]+"/"+each_list
#os.walk()函數返回三個參數:路徑,子文件夾,路徑下的文件,利用字元串拼接file[0]和file[2]得到文件的路徑
name.insert(0,file_path)
all_xls=collect_xls(name,type2)
#遍歷所有type文件路徑並讀取數據
forevey_nameinall_xls:
xls_data=xlrd.open_workbook(evey_name)
foreach_sheetinxls_data.sheets():
sheet_data=test_wy.excel_table_byname(evey_name,0,each_sheet.name)
#請參考讀取excel文件的代碼
raw_data.insert(0,sheet_data)
print(each_sheet.name,":Datahasbeendone.")
returnraw_data
a=read_xls(xpath,xtype)
print("Victory")
B. 菜鳥求助xlrd安裝問題
首先到kangle官方網站上下載最新的源代碼。前提條件:請先確保你的系統上有g++,libz開發包,libpcre開發包,libiconv開發包(非linux版要).如你的系統為centos/rhel則運行下面命令安裝這些包:1.yum-yinstallwgetmakegccgcc-c++pcre-develzlib-devel第一步下載源代碼:下載後我們會得到kangle-x.y.z.tar.gz(x,y,z是版本號,以下命令請替換x,y,z為具體的版本號)以2.8.3版本為例:第一步,wget下載相應的壓縮包第二步,解壓:1.tarxzfkangle-2.8.3.tar.gz2.cdkangle-2.8.3第三步,配置:這一步用來配置kangle源代碼。1../configure--prefix=/vhs/kangle--enable-disk-cache--enable-ipv6--enable-ssl--enable-vh-limit第四步編譯安裝:1.make2.makeinstall第五步啟動kangle1./vhs/kangle/bin/kangle第六步進入kangle管理通過瀏覽器打開1.patibleinstall/usr/bin/install-:error:!Checkyoursystemclock[[email protected]]#make[[email protected]]#makeinstall[root@localhostkang這是你伺服器上的時間不對。運行以下命令。1.find.|xargstouch
C. Python xlrd,xlrt讀寫Excel怎麼識別刪除線
導入
import xlrd
打開excel
data = xlrd.open_workbook('demo.xls') #注意這里的workbook首字母是小寫
查看文件中包含sheet的名稱
data.sheet_names()
得到第一個工作表,或者通過索引順序 或 工作表名稱
table = data.sheets()[0]
table = data.sheet_by_index(0)
table = data.sheet_by_name(u'Sheet1')
獲取行數和列數
nrows = table.nrows
ncols = table.ncols
獲取整行和整列的值(數組)
table.row_values(i)
table.col_values(i)
循環行,得到索引的列表
for rownum in range(table.nrows):
print table.row_values(rownum)
單元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
分別使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
簡單的寫入
row = 0
col = 0
ctype = 1 # 類型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
value = 'lixiaoluo'
xf = 0 # 擴展的格式化 (默認是0)
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0) # 文本:u'lixiaoluo'
table.cell(0,0).value # 'lixiaoluo'
xlwt
http://pypi.python.org/pypi/xlrd
簡單使用
導入xlwt
import xlwt
新建一個excel文件
file = xlwt.Workbook() #注意這里的Workbook首字母是大寫,無語吧
新建一個sheet
table = file.add_sheet('sheet name')
寫入數據table.write(行,列,value)
table.write(0,0,'test')
如果對一個單元格重復操作,會引發
returns error:# Exception: Attempt to overwrite cell:# sheetname=u'sheet 1' rowx=0 colx=0
所以在打開時加cell_overwrite_ok=True解決
table = file.add_sheet('sheet name',cell_overwrite_ok=True)
保存文件
file.save('demo.xls')
另外,使用style
style = xlwt.XFStyle() #初始化樣式
font = xlwt.Font() #為樣式創建字體
font.name = 'Times New Roman'
font.bold = True
style.font = font #為樣式設置字體
table.write(0, 0, 'some bold Times text', style) # 使用樣式
xlwt 允許單元格或者整行地設置格式。還可以添加鏈接以及公式。可以閱讀源代碼,那裡有例子:
dates.py, 展示如何設置不同的數據格式
hyperlinks.py, 展示如何創建超鏈接 (hint: you need to use a formula)
merged.py, 展示如何合並格子
row_styles.py, 展示如何應用Style到整行格子中.
D. Python操作Excel實現自動化報表
Python操作Excel實現自動化報表
安裝
python -m pip install xlrd xlwt xlutils。
基本用法
1.從指定文件路徑讀取excel表格,進行一定操作,然後保存到另一個excel文件:result.xlsx
import xlwt
import xlrd
from xlutils. import
import pandas as pd
from pandas import DataFrame,Series
import os
os.chdir('./')
# 從指定文件路徑讀取excel表格
df = pd.read_excel('D:/mypaper/data/data.xlsx')
# 查看df內容
# 根據age算出出生年份,增加一列
import datetime
import os
year = datetime.datetime.now().year#獲取當前系統時間對應的年份
df['birth'] = year-df['age']
df.to_excel('result.xlsx')#保存到當前工作目錄,可以用os.getcwd()查看
#查看下此時df的內容,可以看到已經生成了birth這一列。
2.單元格操作
# 定義方法:讀取指定目錄下Excel文件某個sheet單元格的值
def excel_read(file_path,table,x,y):
data = xlrd.open_workbook(file_path)
table = data.sheet_by_name(table)
return table.cell(y,x).value
# 定義方法:單元格值及樣式
write_obj_list = []
def concat_obj(cols,rows,value):
write_obj_list.append({'cols':cols,'rows':rows,'value':value,
'style':xlwt.easyxf('font: name 宋體,height 280;alignment: horiz centre')})
# 定義方法:合並單元格
def merge_unit(srows,erows,scols,ecols,value):
write_obj_list.append({'id':'merge','srows':srows,'erows':erows,'scols':scols,
'ecols':ecols,'value':value,'style':xlwt.easyxf('font: name 宋體,height 280;alignment: horiz centre')})
# 定義方法:更新excel
excel_update(file_path,write_obj_list,new_path):
old_excel = xlrd.open_workbook(file_path, formatting_info=True)
#管道作用
new_excel = (old_excel)
'''
通過get_sheet()獲取的sheet有write()方法
'''
sheet1 = new_excel.get_sheet(0)
'''
1代表是修改第幾個工作表裡,從0開始算是第一個。此處修改第一個工作表
'''
for item in write_obj_list:
if 'id' not in item.keys():
if 'style' in item.keys():
sheet1.write(item['rows'], item['cols'], item['value'],item['style'])
else:
sheet1.write(item['rows'], item['cols'], item['value'])
else:
if 'style' in item.keys():
sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'],item['style'])
else:
sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'])
'''
如果報錯 dict_items has no attributes sort
把syle源碼中--alist.sort() 修改為----> sorted(alist)
一共修改2次
'''
new_excel.save(file_path)
#參數詳解
# srows:合並的起始行數
# erows:合並的結束行數
# scols:合並的起始列數
# ecols:合並的結束列數
# value:合並單元格後的填充值
# style:合並後填充風格:
# font: name 宋體
# height 280;
# alignment: horiz centre
# ... 與excel操作基本保持一致
(注意:該方法僅僅是將需要直行的動作保存到一個list中,真正的動作還未執行,執行動作是發生在excel_update方法中)
最終調用excel_update方法,傳入每個單元格需要進行的操作和填充值的write_obj_list以及文件保存路徑file_path,就可以在當前工作目錄下生成想要的Excel結果文件。
注意:
1.write_obj_list支持用戶自定義
2.write_obj_list也可以是根據excel_read方法讀取現有待修改的excel文件(可以維持原有表格的格式)而生成
End
E. 如何用C#讀取excel數據並寫入到另一個excel
os.chdir(『d:\\』)#裡面的路徑應該只有100個xls文檔
for
i
in
os.popen('dir')
i=i.strip('\n')
#讀取的每個文檔都帶有\n,應該去掉
table=xlrd.open(i)
#每獲取一個文檔名,打開一個
F. python如何實現讀取excel中賬號密碼後自動登錄網頁並實現固定操作
這個有工作量的,需要比較多的調試時間。
另外程序也不能通用,個別步驟是需要針對網站進行適配
G. python的 xlrd 在AIX系統下打開文件特別慢
代碼:
file_name='API.xlsx'
sheet_name='Sheet1'
def open_excel (file_name,sheet_name):
#根據當前文件的路徑獲取TestData文件的路徑,並打開
file_name=os.path.abspath(os.path.dirname(os.getcwd())+os.path.sep+"..")+"\\"+file_name
data=xlrd.open_workbook(file_name)
table=data.sheet_by_name(sheet_name)
print sheet_name
print file_name
if __name__=="__main__":
open_excel(file_name,sheet_name)
H. 如何創建 python+requests介面自動化測試框架
需要對於讀出來的數據進行相應的處理。 當然示例中只是簡單列了一下關於POST,GET等二種方式,實際還有很多其它方式,如put,delete等,請求中也還會包括headers,這些都可以自憶添加上去。
I. excel怎麼實現報表自動化
想實現報表自動化還得依靠BI工具去實現,Smartbi Excel分析就是面向Excel用戶的數據分析工具,它結合了Excel的優點,解決了Excel的問題,真正做到賦能企業一線業務用戶,讓人人都是自助分析師,促進企業的全民數字化運營。