日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自动化办公培训_python-自动化办公

發布時間:2024/10/14 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自动化办公培训_python-自动化办公 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Excel處理

需要安裝xlrd、xlwt、xlutils三個包

Excel讀

import xlrd

#文件載入

wb = xlrd.open_workbook('../test/datafiles/test.xls')

# 獲取sheet信息

# 獲取sheet數量

print("sheet 數量:", wb.nsheets)

# 獲取sheet名

sheets = wb.sheets()

print("sheet名稱:", wb.sheet_names())

# 根據索引-通過sheet對象獲得

sh = wb.sheet_by_index(0)

print(sh.name)

# 根據名稱-通過sheet對象獲得

sh = wb.sheet_by_name('fruits')

print(sh.name)

#

# 取整行、整列

print("sheet %s 有 %s 行 %s 列" % (sh.name, sh.nrows, sh.ncols))

print("第一行的值為:", sh.row_values(0))

print("第二列的值為:", sh.col_values(1))

# 單元格操作

cell = sh.cell(0, 1)

print("第一行的第二列的值:", cell.value)

#獲取單元格類型 0 空值; 1 字符串; 2 數值; 3 日期

print("第二行第二列的類型是:", sh.cell(11, 1).ctype)

# 數值

cell = sh.cell(2, 3)

if cell.ctype == 2:

print("第3行的第4列的值:", int(cell.value))

print("最后一行最后一列的值:", sh.cell_value(-1, -1))

# 日期時間

sh = wb.sheet_by_name('fruits')

cell = sh.cell(1, 0)

if cell.ctype == 3:

value = xlrd.xldate_as_datetime(cell.value, 0)# 獲得一datetime對象

print(value.strftime('%Y-%m-%d'))

for i in range(sh.nrows):#讀行

for j in range(sh.ncols):#讀列

cell = sh.cell(i, j)

value = cell.value

if cell.ctype == 2:

if j == 4:

value = int(value)

elif j == 5:

value = round(value, 1)

elif j == 6 or j == 7:

value = round(value, 2)

elif cell.ctype == 3:

d = xlrd.xldate_as_datetime(value, 0)

value = d.strftime('%Y-%m-%d')

print(str(value).center(10), end='\t')#字符串不足10位補滿10位后居中

print()

Excel寫

import xlwt

wb = xlwt.Workbook()#創建一個Excel對象

sh = wb.add_sheet('第一季度', cell_overwrite_ok=True)#某個單元格可以復寫,多次寫入不報錯

sh.write(0, 0, '姓名')

sh.write(0, 1, '1月')

sh.write(0, 2, '2月')

sh.write(0, 3, '3月')

sh = wb.add_sheet('平方值', cell_overwrite_ok=True)

for i in range(20):

sh.row(i).write(0, i+1)#在第i行第1列寫內容

sh.row(i).write(1, (i+1) * (i+1))#在第i行第2列寫內容

wb.save('../test/datafiles/test_write.xls')

Excel寫入讀出的內容&編輯寫入后的

讀寫改Excel

rfile_ph='../test/datafiles/test.xls'

wfile_ph='../test/datafiles/test_write1.xls'

#寫入讀出

import xlwt

import xlrd

re = xlrd.open_workbook(rfile_ph).sheet_by_index(0)#獲取第一個頁簽對象

we = xlwt.Workbook()#創建一個Excel對象

sh = we.add_sheet('復制后sheet1', cell_overwrite_ok=True)#某個單元格可以復寫,多次寫入不報錯

for i in range(re.nrows):#讀行

for j in range(re.ncols):#讀列

sh.write(i, j, re.cell(i, j).value) # 在第i行第1列寫內容

we.save(wfile_ph)

#修改

from xlutils import copy

rb = xlrd.open_workbook(wfile_ph) #打開文件

wb = copy.copy(rb) #利用xlutils.copy下的copy函數復制

ws = wb.get_sheet(0) #獲取表單0

ws.write(0, 0, 'changed!') #改變(0,0)的值

ws.write(8,0,label = '好的') #增加(8,0)的值

wb.save(wfile_ph)

Word處理

Word寫

需要安裝python-docx包

from docx import Document

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

from docx.shared import Mm, Inches, Pt, RGBColor

doc = Document()

title = doc.add_heading("每日運營數據分析報告", 0)#增加標題 級別1

title.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#一級標題并且居中

doc.add_paragraph('此報告為Python腳本每日自動生成,共分為三部分')#新增段落

doc.add_paragraph('數據匯總', style="List Number")#新增段落,風格為列表 1.數據匯總

doc.add_paragraph('線上數據', style="List Number")#新增段落,風格為列表 2.線上數據

doc.add_paragraph('線下數據', style="List Number")

doc.add_heading('數據匯總', 1)#增加標題 級別2

online_sale = 292932

shop_sale = 192837

pg = doc.add_paragraph('昨日線上銷售總額為{:,}元,線下銷售總額為{:,}元,'

'總計銷售額為{:,}元'.format(online_sale, shop_sale, online_sale + shop_sale))

pg.paragraph_format.left_indent = Mm(5)#增加5毫米縮進

doc.add_heading('線上數據分析', 1)

pg = doc.add_paragraph('各渠道類型銷售金額分布如下:')

pg.add_run('免費渠道為292189元,付費渠道為283272元')#增加文本

doc.add_picture('../test/datafiles/online_sale.png', width=Inches(5.5))#增加圖片并限制大小

doc.add_paragraph('建議改進方案:')

doc.add_paragraph('增加付費廣告投放', style="List Bullet")#新增段落,風格為列表-小圓點 ·增加付費廣告投放

doc.add_paragraph('提高著陸頁的加載速度', style="List Bullet")#新增段落,風格為列表-小圓點 ·提高著陸頁的加載速度

doc.add_paragraph('減少頁面跳轉', style="List Bullet")

doc.add_heading('線下數據分析', 1)

table = doc.add_table(rows=1, cols=3)#新增表格

cells = table.rows[0].cells

cells[0].text = '城市'

cells[1].text = '銷量'

records = [

['北京', '100'],

['上海', '120'],

['天津', '300'],

['河北', '200'],

['廣東', '400'],

['遼寧', '500'],

['江蘇', '700'],

['湖南', '600']

]

for city, amount in records:

cells = table.add_row().cells

cells[0].text = city

cells[1].text = amount

doc.add_picture('../test/datafiles/city_sale.png', width=Inches(5.5))

graph = doc.add_paragraph()

graph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT #右對齊

graph.add_run('報告撰寫人:').bold = True

graph.add_run('劉德華')

graph = doc.add_paragraph()

graph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT

graph.add_run('聯系郵箱:').bold = True

run = graph.add_run('xxxx@email.com')

run.font.name = 'Times New Roman'#字體

run.font.size = Pt(12)#大小

run.italic = True#斜體

run.underline = True#下劃線

doc.add_page_break()#強制增加分頁

graph = doc.add_paragraph()

graph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

run = graph.add_run('謝謝觀看')

run.font.color.rgb = RGBColor(255, 0, 0)#顏色 RGB

doc.add_paragraph('此報告為機密文件,請勿泄露', style="Intense Quote")

doc.save('../test/datafiles/daily_report.docx')

Word轉PDF

需要安裝doxc2pdf包

from docx2pdf import convert

convert('../test/datafiles/daily_report.docx', '../test/datafiles/運營報告.pdf')

PDF處理

PDF讀取

需要安裝pdfminer包

from docx2pdf import convert

convert('../test/datafiles/daily_report.docx', '../test/datafiles/運營報告.pdf')

from pdfminer.converter import TextConverter

from pdfminer.layout import LAParams

from pdfminer.pdfdocument import PDFDocument

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

from pdfminer.pdfpage import PDFPage

from pdfminer.pdfparser import PDFParser

from io import StringIO

output_string = StringIO()

with open('../test/datafiles/運營報告.pdf', 'rb') as f:

# 從文件句柄創建一個pdf解析對象

parser = PDFParser(f)

# 創建pdf文檔對象,存儲文檔結構

doc = PDFDocument(parser)

# 創建一個pdf資源管理對象,存儲共享資源

rm = PDFResourceManager()

# 創建一個device對象,指定參數,行距、邊距等,這里使用默認參數

device = TextConverter(rm, output_string, laparams=LAParams())

# 創建一個解釋對象

interpreter = PDFPageInterpreter(rm, device)

# 按頁解析pdf文件

for page in PDFPage.create_pages(doc):

# 將內容讀取到緩存

interpreter.process_page(page)

# 打印出緩沖區的內容

print(output_string.getvalue())

PDF讀取

需要安裝pypdf2包

#添加水印

from PyPDF2 import PdfFileReader, PdfFileWriter

watermark_pdf = PdfFileReader('../test/datafiles/水印.pdf')

watermark = watermark_pdf.getPage(0)#讀取第一頁

input_pdf = PdfFileReader('../test/datafiles/運營報告.pdf')

writer = PdfFileWriter()

for pn in range(input_pdf.getNumPages()):

page = input_pdf.getPage(pn)

page.mergePage(watermark)#合并頁

writer.addPage(page)

with open('../test/datafiles/包含水印.pdf', 'wb') as f:

writer.write(f)

郵件發送

不需要安裝其他包,需要用你本地自己的郵箱發送,所以需要去郵箱設置開啟POP3/SMTP服務。

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

# 1. 設置服務器所需信息

# SMTP服務器域名

mail_host = 'smtp.qq.com'

# 郵箱用戶名

mail_user = '651435666@qq.com'

# 密碼或授權碼

mail_pass = '這里填寫授權碼'

# 郵件發送方郵箱地址,有可能和用戶名不一樣

sender = '651435666@qq.com'

# 郵件接收方郵箱地址,可以有多個收件人,所以用列表

receivers = ['651435666@qq.com']

# 2 設置郵件內容

# 可以帶附件的郵件消息對象

message = MIMEMultipart()

# 郵件主題

message['Subject'] = '每日運營報告'

# 發送方信息

message['From'] = sender

# 接受方信息

message['To'] = receivers[0]

# 2.1 郵件正文

content = MIMEText('詳情請見附件','plain','utf-8')

# 將正文添加到消息對象中

message.attach(content)

# 2.2 構造附件

with open('../test/datafiles/運營報告.pdf', 'rb') as f:

# 設置附件的文件路徑

att = MIMEText(f.read(), 'base64', 'utf-8')

# 設置附件頭信息:文件類型、文件名

att["Content-Type"] = 'application/octet-stream'

att["Content-Disposition"] = 'attachment; filename="daily_report.pdf"'

# 將附件添加到郵件內容中

message.attach(att)

# 3. 發送郵件

try:

smtpObj = smtplib.SMTP_SSL(mail_host, 465)

# 設置日志級別,這樣萬一出錯就會有詳細的輸出

smtpObj.set_debuglevel(1)

# 登錄到服務器

smtpObj.login(mail_user, mail_pass)

#發送

smtpObj.sendmail(sender, receivers, message.as_string())

smtpObj.quit()

print('郵件發送成功')

except smtplib.SMTPException as e:

print('error', e)

爬蟲

網頁抓取

#網頁的抓取

import requests

r=requests.get('https://news.sina.com.cn/')

#設置編碼格式

r.encoding='utf-8'

#查看返回的狀態碼 200是正常 400找不到 500他們服務器有問題

print(r.status_code)

#若返回的狀態碼不是200,拋異常,后續代碼不再執行

r.raise_for_status()

#查看網頁的內容

# print(r.text)

#帶參數的URL-動態?成參數

params = {'product_id': '123', 'key': 'iphone'}

r=requests.get('https://item.jd.com/100008567426.html', params=params)

print(r.status_code)

# 設置頭信息

headers = {

'Cookie': 'll="108288"; bid=v8-QyOSurlo',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'

}

# 使?GET?法請求服務器

response = requests.request("GET", 'https://httpbin.org/post', headers=headers)

# 當返回的狀態碼不是2xx時,將會拋出異常

response.raise_for_status()

# 打印具體的狀態碼數值

print(response.status_code)

if response.status_code == 200:

print("ok")

else:

print("error")

網頁處理

需要引用beautifulsoap4包

#網頁的處理

from bs4 import BeautifulSoup

with open('../test/datafiles/python.html', encoding='utf-8') as f:

text = f.read()

# 以字符串對象創建BeautifulSoup對象

bs = BeautifulSoup(text, 'lxml')

# ?整的打印出所有HTML代碼

print(bs.prettify())

# title節點的名稱

print(bs.title.name)

# title節點的?本

print(bs.title.text)

# title節點的?節點名稱

print(bs.title.parent.name)

# 第?個p節點的?節點的所有?節點

print(bs.p.parent.children)

# p節點的class屬性

print(bs.p['class'])

# 第?個a標簽節點

print(bs.a)

# 所有的a標簽節點

print(bs.find_all('a'))

# 屬性id為title1的第?個節點

print(bs.find(id='title1'))

# 找出所有class屬性為paragraph的p標簽,注意class是Python中的關鍵字,所以在傳參數時加了?個下劃線。

bs.find_all('p', class_='paragraph')

# 第?個a節點

print(bs.find('a'))

# 找出所有的a節點,并打印他們的?本

for a in bs.find_all('a'):

print(a.text)

# 獲取?檔內所有?字內容

print(bs.get_text())

爬取實戰

#網站爬取

import requests

from bs4 import BeautifulSoup

# 起始??

start_url = 'http://quotes.toscrape.com'

# 剛開始的時候下??就是起始?

next_page_url = start_url

# 不停的獲取下??

while next_page_url:

r = requests.get(next_page_url)

r.raise_for_status()

bs = BeautifulSoup(r.text, 'html.parser')

# 解析出當前??的內容

div_list = bs.find_all('div', class_='quote')

for div in div_list:

print(div.small.text, ':', div.span.text)

# 獲取下??按鈕

next_page = bs.find('li', class_='next')

if not next_page:

# 如果沒有下??,結束爬?

break

# 取下??的鏈接

next_page_url = next_page.a['href']

# 拼裝成完整的URL

next_page_url = start_url + next_page_url

總結

以上是生活随笔為你收集整理的python自动化办公培训_python-自动化办公的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。