python畫表格
1. 用python怎麼print出一張完整的表格內容
顯示一張完整的表格(即包含表格線、表頭以及表體內容),有多種方法,根據顯示的應用場合不同,採取的方法也不同,以下試舉例供參考:
1、調用表格類軟體顯示。如,可以直接調用 excel 軟體,來打開/生成表格並顯示。
2、調用 word 類字處理軟體。
3、使用 html 之類的代碼生成超文本格式表格,用瀏覽器軟體顯示。
4、直接用字元表格的形式顯示出來。如,可以使用製表符製作並顯示一個字元式的表格:
2. 用python 畫一個網格
print函數是輸出字元串,所以用 print輸出形成的 grid其實質是具有某特定形狀的字元串,而plt.grid() 繪制出的網格是 圖片。
字元串是可以用文字處理軟體(如 word、記事本等)直接編輯處理的,而圖片則只能用圖片編輯軟體(如畫筆)打開處理。
如問題所要求的最簡單的「編寫一個能畫出如下網格(grid)的函數」代碼,可以簡單的用 print函數就可以了:
3. 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
4. 用python生成在html中顯示的表格
可以通過寫python腳本製作HTML的form,包括HTML的標簽什麼的
python 有個第三方庫pyh用來生成HTML,可以試用一下:
from pyh import *
page = PyH('This is PyH page')
page << h1(cl='center', 'My big title')
table1 = page << table(border='1',id='mytable1')
headtr = table1 << tr(id='headline')
headtr << td('Head1') << td('Head2')
tr1 = table1 << tr(id='line1')
tr1 << td('r1,c1') <<td('r1,c2')
tr2 = table1 << tr(id='line2')
tr2 << td('r2,c1') <<td('r2,c2')
page.printOut()
5. python 怎麼生出成一個表格,並發送郵件
生成excel表格可以用pyExcelerator模塊
類似
from pyExcelerator import *
wb = Workbook()
ws = wb.add_sheet('Sheet1')
ws.write(0,0,'host')
ws.write(0,1,'asker')
ws.write(0,2,'head')
ws.write(0,3,'main')
ws.write(0,4,'time')
發送郵件可以用email模塊,需要加附件
類似
from email.mime.text import MIMEText
from email.MIMEMultipart import MIMEMultipart
import email.MIMEText
import email.MIMEBase
sender = '[email protected]'#發件人地址
receiver = '[email protected]'#收件人地址
smtpserver = 'smtp.qq.com'#郵件伺服器
username = '307212178'#用戶名
password = 'aaaaaa111111'#密碼
smtp = smtplib.SMTP()
def send_email(msg,file_name):
msgRoot = MIMEMultipart()
msgRoot['Subject'] = 'DO not see it!!!!!'#郵件標題,這里我把標題設成了你所發的附件名
msgText = MIMEText('%s'%msg,'html','utf-8')#你所發的文字信息將以html形式呈現
msgRoot.attach(msgText)
att = MIMEText(open('%s'%file_name, 'rb').read(), 'base64', 'utf-8')#添加附件
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="%s"'%file_name
msgRoot.attach(att)
while 1:#持續嘗試發送,直到發送成功
try:
smtp.sendmail(sender, receiver, msgRoot.as_string())#發送郵件
break
except:
try:
smtp.connect(smtpserver)#連接至郵件伺服器
smtp.login(username, password)#登錄郵件伺服器
except:
print "failed to login to smtp server"#登錄失敗
if __name__ == "__main__":
MSG="表格"#要發送的文字
FILE="C:\\Users\1.txt"#要發送的文件
send_email(MSG,FILE)
裡面的內容有刪減,你可以自己添加刪減
6. python怎樣做html的表格
現要實現python製作html格式的表格,利用Python對字元串str.format()格式化操作進行處理,在日常對CVS格式文件處理過程當中,經常會將CVS格式文件進行轉換,在正式場合是程序讀取CVS文件進行轉換並輸出到html格式的文件當中,但現在只是實現一下轉換的過程,需要輸入以逗號分隔的數據。
在設計程式的時候,需要先定義一下整個代碼的框架,首先我們要定義一個主函數main(),雖然Python沒有規定入口函數,一般在正式的開發中都設計了一個main()函數作為程序的入口函數,或許這是一種規范吧。然後我們在定義一個列印表頭的方法print_head(),並在主函數里進行調用。再定義一個列印表尾的方法print_end(),也在主函數中進行調用。定義print_line()為列印表格行,定義extract_field()處理cvs行數據轉換為list集合數據。最後再定義一個處理特殊符號的方法escape_html(),因為在html代碼中為了避免與它的標簽沖突,特要進行特殊符號的轉換,如&-->&
還有就是對長度過長的數據要進行處理並用...代替
源代碼:
#Author Tandaly
#Date 2013-04-09
#File Csv2html.py
#主函數
def main():
print_head()
maxWidth = 100
count = 0
while True:
try:
line = str(input())
if count == 0:
color = "lightgreen"
elif count%2 == 0:
color = "white"
else:
color = "lightyellow"
print_line(line, color, maxWidth)
count += 1
except EOFError:
break
print_end()
#列印表格頭
def print_head():
print("")
#列印錶行
def print_line(line, color, maxWidth):
tr = "".format(color)
tds = ""
if line is not None and len(line) > 0:
fields = axtract_fields(line)
for filed in fields:
td = "{0}".format(filed if (len(str(filed)) <= maxWidth) else
(str(filed)[:100] + "..."))
tds += td
tr += "{0}
".format(tds)
print(tr)
#列印表格尾
def print_end():
print("")
#抽取行值
def axtract_fields(line):
line = escape_html(line)
fields = []
field = ""
quote = None
for c in line:
if c in "\"":
if quote is None:
quote = c
elif quote == c:
quote = None
continue
if quote is not None:
field += c
continue
if c in ",":
fields.append(field)
field = ""
else:
field += c
if len(field) > 0:
fields.append(field)
return fields
#處理特殊符號
def escape_html(text):
text = text.replace("&", "&")
text = text.replace(">", ">")
text = text.replace("<", "<")
return text
#程序入口
if __name__ == "__main__":
main()
運行結果:
>>>
"nihao","wo"
nihaowo
"sss","tandaly"
...tandaly
"lkkkkkkkkkkksdfssssssssssssss",
34
...34
7. python 怎麼生出成一個表格,並發送郵件
# -*- coding: utf-8 -*-
#程序名稱:自動化缺陷報告腳本
#程序描述:實現從本地路徑讀取excel文件內容,並繪制HTML表格,將內容寫入郵件正文區發送
#編寫時間:2014.11.29-2014.12.4
#作者:劉琳澤
#解釋環境:Windows 7家庭高級版 Python 2.7.8IDLE
#引入excel文檔相關庫
import xlrd
import os,time
#引入郵件相關庫
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import base64
#處理從excel中讀取的float類型數據的類
#目前集成兩種處理:(1)float到int型的轉換(2)float到str型的轉換,後續有需要可以增加方法以集成其他類型的轉換
class judgeFloat:
def floatToInt(self,variable):
variable="%d"%variable
return variable
def floatToStr(self,variable):
variable=xlrd.xldate_as_tuple(variable,0)
variable=list(variable)
if variable[1]<10:
variable[1]='0'+str(variable[1])
variable=str(variable[0])+str(variable[1])+str(variable[2])
return variable
#確定文檔是否修改的函數:獲取文檔的修改時間與本地時間對比,不一致要求用戶確認是否繼續執行,一致則直接執行
def openFile(filename,address):
filetime=time.strftime("%Y/%m/%d",time.localtime(os.stat(address+filename).st_mtime))
local=time.strftime("%Y/%m/%d",time.localtime())
if filetime!=local:
single=input("文檔今天還沒有修改過,請確認是否繼續?確認請輸入1後點擊回車,否則輸入2點擊回車。")
if single==1:
pass
elif single==2:
exit()
else:
print '您的輸入有誤!腳本即將結束。'
time.sleep(5)
exit()
else:
pass
#寫郵件的函數
def mailWrite(filename,address):
header='<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>'
th='<body text="#000000">committed缺陷詳情:<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000000" width="1800" align="left" ><tr bgcolor="#F79646" align="left" ><th>標識</th><th>摘要</th><th>狀態</th><th>優先順序</th><th>嚴重性</th><th>標記</th><th>所有者</th><th>創建時間</th><th>修改時間</th></tr>'
#打開文件
filepath=address+filename
book=xlrd.open_workbook(filepath)
sheet=book.sheet_by_index(0)
#獲取行列的數目,並以此為范圍遍歷獲取單元數據
nrows = sheet.nrows-1
ncols = sheet.ncols
body=''
cellData=1
for i in range(1,nrows+1):
td=''
for j in range(ncols):
#讀取單元格數據,賦給cellData變數供寫入HTML表格中
cellData=sheet.cell_value(i,j)
#調用浮點型轉換方法解決讀取的日期內容為浮點型數據的問題
if isinstance(cellData,float):
if j==0 and i>0:
cellDataNew=judgeFloat()
cellData=cellDataNew.floatToInt(cellData)
else:
cellDataNew=judgeFloat()
cellData=cellDataNew.floatToStr(cellData)
else:
pass
tip='<td>'+cellData+'</td>'
#並入tr標簽
td=td+tip
tr='<tr>'+td+'</tr>'
#為解決字元串拼接問題增設語句,tr從excel中讀取出來是unicode編碼,轉換成UTF-8編碼即可拼接
tr=tr.encode('utf-8')
#並入body標簽
body=body+tr
tail='</table></body></html>'
#將內容拼接成完整的HTML文檔
mail=header+th+body+tail
return mail
#發送郵件
def mailSend(mail):
#設置發件人
sender = '***'
#設置接收人
receiver = '***@***.com'
#設置郵件主題
subject = '測試郵件,請忽略!'
#設置發件伺服器,即smtp伺服器
smtpserver = 'smtp.***.net'
#設置登陸名稱
username = '***@***.net'
#設置登陸密碼
password = '******'
#實例化寫郵件到正文區,郵件正文區需要以HTML文檔形式寫入
msg = MIMEText(mail,'html','utf-8')
#輸入主題
msg['Subject'] = subject
#調用郵件發送方法,需配合導入郵件相關模塊
smtp = smtplib.SMTP()
#設置連接發件伺服器
smtp.connect('smtp.***.net')
#輸入用戶名,密碼,登陸伺服器
smtp.login(username, password)
#發送郵件
smtp.sendmail(sender, receiver, msg.as_string())
#退出登陸並關閉與發件伺服器的連接
smtp.quit()
#入口函數,配置文件地址和文件名
def main():
filename='Sheet1.xlsx'
address='d:/defectManage/'
openFile(filename,address)
mail=mailWrite(filename,address)
mailSend(mail)
#調用執行main函數
if __name__=="__main__":
main()