Python自动化
管理文件及文件夹
import os
print(os.getcwd())
print(os.path.join('project','python'))
print(os.listdir())
files = os.listdir()
for file in files:
print(os.path.isdir(file))
for file in os.scandir():
print(file.name,file.path,file.is_dir())
print(file.stat())
for dirpath,dirnames,files in os.walk('./'):
import glob
print(glob.glob('**/*.py',recursive=True))
import fnmatch
print(fnmatch.fnmatch('less1.py','le*[0-9].py'))
print(os.stat('less.py'))
from tempfile import TemporaryFile
f = TemporaryFile('w+')
f.write('hello')
f.seek(0)
data = f.readlines()
print(data)
f.close()
from tempfile import TemporaryDirectory
with TemporaryDirectory() as tmp_folder:
print(f'临时文件夹以创建:{tmp_folder}')
if not os.path.exists('新文件夹'):
os.mkdir('新文件夹')
os.makedirs('1/2/3')
import shutil
shutil.copy('filw1.txt','./新文件夹/newFile.txt')
shutil.copytree('文件夹','新文件夹')
shutil.move('fileq.txt','路径')
os.rename('文件','新的文件')
os.remove('file.txt')
shutil.rmtree('文件夹')
import zipfile
with zipfile.ZipFile('压缩问价.zip', 'r') as zipobj:
zipobj.extract('要解压的文件名', '位置', '密码')
for file_name in zipobj.namelist():
print(file_name.encode('cp437').decode('gbk'))
info = zipobj.getinfo(file_name)
file_list = ['1.py','2.py']
with zipfile.ZipFile('创建的压缩包.zip','w') as zipobj:
for file in file_list:
zipobj.write(file)
with zipfile.ZipFile('创建的压缩包.zip','a') as zipobj:
zipobj.write('待追加的文件名')
操作Excel表格
from openpyxl import load_workbook
workbook = load_workbook(file_name='文件.xlsx')
print(workbook.sheetnames)
sheet = workbook['sheet名称']
print(sheet.dimensions)
sheet1 = workbook.active
cell = sheet1['A1']
print(cell.value)
print(cell.row)
print(cell.column)
print(cell.coordinate)
cell1 = sheet1.cell(row=1,column=1)
cells = sheet1['A1:A5']
cell_column = sheet1['A']
cells_row = sheet1['1']
for row in sheet1.iter_rows(min_row,max_row,min_col,max_col):
print(row)
for row in sheet1.rows:
print(row)
workbook = load_workbook(file_name='文件.xlsx')
sheet1 = workbook.active
sheet1['A1'] = 'hello'
workbook.save(file_name='文件.xlsx')
cell = sheet1['A1']
cell.value = 'hello'
workbook.save(file_name='文件.xlsx')
workbook = load_workbook(file_name='文件.xlsx')
sheet1 = workbook.active
data = [
['a',1],
['b',2],
['c',3],
['d',4],
]
for row in data:
sheet1.append(row)
workbook.save(file_name='文件.xlsx')
workbook = load_workbook(file_name='文件.xlsx')
sheet1 = workbook.active
sheet1['F1002'] = '=AVERAGE(F2:F1001)'
workbook.save(file_name='文件.xlsx')
from openpyxl.utils import FORMULAE
print(FORMULAE)
workbook = load_workbook(file_name='文件.xlsx')
sheet = workbook.active
sheet.insert_cols(idx=2,amount=5)
sheet.delete_cols(idx=2,amount=5)
sheet.insert_rows(idx=2,amount=5)
sheet.delete_rows(idx=2,amount=5)
sheet.move_range('C1:D4',rows=2,cols=-2)
workbook.create_sheet('sheet名称')
workbook.remove('sheet名称')
sheet1 = workbook['sheet1']
workbook.copy_worksheet(sheet1)
sheet1.title = '表格2'
workbook.save(file_name='文件.xlsx')
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet.title = '表格'
workbook.save(file_name='新文件.xlsx')
workbook = load_workbook(file_name='文件.xlsx')
sheet = workbook.active
sheet.freeze_panes = 'G2'
sheet.auto_filter.ref = sheet.dimensions
workbook.save(file_name='文件.xlsx')
from openpyxl.styles import Font
from openpyxl.styles import Alignment
from openpyxl.styles import Side,Border
from openpyxl.styles import PatternFill,GradientFill
workbook = load_workbook(file_name='文件.xlsx')
sheet = workbook.active
cell = sheet['A1']
font = Font(name='字体名称',size='字体大小',bold='是否加粗',italic='是否斜体',color='颜色')
cell.font = font
alignment = Alignment(horizontal='水平对齐方式',vertical='垂直对齐方式',text_rotation='旋转角度',wrap_text='是否自动换行')
cell.alignment = alignment
side = Side(style='边线样式',color='颜色')
cell.side = side
border = Border(left='左线样式',right='右',top='上',bottom='下')
cell.border = border
pattern_fill = PatternFill(fill_type='填充样式',fgColor='颜色')
cell.fill = pattern_fill
cell2 = sheet['A2']
gradient_fill = GradientFill(stop=('渐变颜色1','渐变颜色2',...))
cell2.fill = gradient_fill
sheet.row_dimensions[行编号].height = 行高
sheet.column_dimensions[列编号].width = 列宽
sheet.merge_cells('C1:D2')
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
sheet.unmerge_cells('C1:D2')
sheet.unmerge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
workbook.save(file_name='文件.xlsx')
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
workbook = load_workbook(file_name='文件.xlsx')
sheet = workbook.active
logo = Image("xx.png")
logo.height=100
logo.width=100
sheet.add_image(logo,'C1')
workbook.save(file_name='文件.xlsx')
from openpyxl import load_workbook
from openpyxl.chart import BarChart,Reference
workbook = load_workbook(file_name='文件.xlsx')
sheet = workbook.active
chart = BarChart()
data = Reference(worksheet=sheet,min_row=1,max_row=7,min_col=2,max_col=3)
categories = Reference(worksheet=sheet,min_row=2,max_row=7,min_col=1)
chart.add_data(data,titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart,"E2")
workbook.save(file_name='文件.xlsx')
from openpyxl import load_workbook
from openpyxl.chart import LineChart,Reference
workbook = load_workbook(file_name='文件.xlsx')
sheet = workbook.active
chart = LineChart()
data = Reference(worksheet=sheet,min_row=1,max_row=7,min_col=2,max_col=3)
categories = Reference(worksheet=sheet,min_row=2,max_row=7,min_col=1)
chart.add_data(data,from_rows=True,titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart,"E2")
workbook.save(file_name='文件.xlsx')
操作PDF
import pdflumber
with pdflumber.open('pdf路径') as pdf:
first_page = pdf.pages[页数]
print(first_page.extract_text())
print(first_page.extract_table(
table_settings={
"vertical_strategy":"text",
"horizontal_strategy":"text"
}
))
from PyPDF2 import PdfFileReader,PdfFileWriter
pdf_reader = PdfFileReader('pdf路径')
for page in range(pdf_reader.getNumPages()):
pdf_writer = PdfFileWriter()
page = pdf_reader.getPage(page).rotateClockwise(90)
page = pdf_reader.getPage(page).rotateCounterClockwise(90)
pdf_writer.addPage(page)
with open(f'./分割后的PDF文件/{page}.pdf','wb') as out:
pdf_writer.write(out)
pdf_writer = PdfFileWriter()
for page in range(16):
pdf_reader = PdfFileReader(f'./分割后的PDF文件/{page}.pdf','wb')
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
with open('xxx.pdf','wb') as out:
pdf_writer.write(out)
from PyPDF2 import PdfFileReader,PdfFileWriter
from copy import copy
watermark_pdf = PdfFileReader('水印.pdf')
watermark_page = watermark_pdf.getPage(0)
pdf_reader = PdfFileReader('xx.pdf')
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
original_page = pdf_reader.getPage(page)
new_page = copy(watermark_page)
new_page.mergePage(original_page)
pdf_writer.addPage(new_page)
with open('watermarked.pdf','wb') as out:
pdf_writer.write(out)
from PyPDF2 import PdfFileReader,PdfFileWriter
pdf_reader = PdfFileReader('xx.pdf')
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
pdf_writer.encrypt('密码')
with open('encrypted.pdf','wb') as out:
pdf_writer.write(out)
pdf_reader = PdfFileReader('encrypted.pdf')
pdf_reader.decrypt('密码')
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
with open('encrypted.pdf','wb') as out:
pdf_writer.write(out)
操作Word
- Document 文档
- Paragraph 段落
- Run 文字块
from docx import Document
doc = Document('word.docx')
print(doc.paragraphs)
for paragraph in doc.paragraphs:
print(paragraph.text)
runs = paragraph.runs
print(runs)
doc = Document()
doc.add_heading('一级标题',lecel=1)
paragraph1 = doc.add_paragraph('段落文字内容')
paragraph1.add_run('加粗').bold=True
paragraph1.add_run('普通')
paragraph1.add_run('斜体').italic=True
doc.add_page_break()
from docx.shared import Cm
doc.add_picture('图片地址',width=Cm(5),height=Cm(5))
records = [
['编号','姓名','成绩'],
[1,'li',50],
[2,'cc',90],
]
table = doc.add_table(rows=3,cols=3)
for row in range(3):
cells = table.rows[row].cells
for col in range(3):
cells[col].text=str(records[row][col])
from docx.shared import Pt,RGBColor
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
for paragraph in doc.paragraphs:
for run in paragraph.runs:
run.font.bold=True
run.font.italic=True
run.font.underline=True
run.font.strike=True
run.font.shadow=True
run.font.size=Pt(20)
run.font.color.rgb=RGBColor(255,255,255)
run.font.name='微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
paragraph.paragraph_format.line_spacing = 2.0
paragraph.paragraph_format.space_before = Pt(12)
paragraph.paragraph_format.space_after = Pt(12)
doc.save('保存路径')
操作PPT
from pptx import Presentation
prs = Presentation('xx.pptx')
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:
text_frame = shape.text_frame
for paragraph in text_frame.paragraphs:
print(paragraph.text)
slide = prs.slides.add_slide(prs.slide_layouts[0])
for shape in slide.placeholders:
phf = shape.placeholder_format
print(f'{phf.idx}--{shape.name}--{phf.type}')
shape.text = f'{phf.idx}--{phf.type}'
slide.placeholders[0].text = 'aaaaa'
prs.save('文件路径')
处理邮件
'''
import yagmail
# 存入发件人邮箱地址和密码
yagmail.register('邮箱','密码')
'''
import yagmail
yag = yagmail.SMTP(user='发件人邮箱',host='SMTP服务器域名')
contents = [
'内容1',
'内容2',
'<a href="https://www.runoob.com/docker/docker-tutorial.html>菜鸟</a>',
'文件路径',
yagmail.inline('图片路径')
]
yag.send('收件人邮箱','主题',contents)
yag.send(['收件人邮箱','收件人邮箱','收件人邮箱'],'主题',contents)
import schedule
import time
def job():
print('发邮件')
schedule.every().minutes.do(job)
schedule.every(10).minutes.do(job)
schedule.every().minutes.at(":17").do(job)
while True:
schedule.run_pending()
time.sleep(1)
'''
import yagmail
# 存入发件人邮箱地址和密码
yagmail.register('邮箱','密码')
'''
import keyring
import datetime
from imbox import Imbox
password = keyring.get_password("yagmail","要读取密码的邮箱")
with Imbox('imap服务器地址','要读取的邮箱',password,ssl=True) as imbox:
all_inbox_messages = imbox.messages()
unread_inbox_messages = imbox.messages(unread=True)
for uid,message in all_inbox_messages:
print(message.subject)
print(message.body['plain'])
imbox.mark_seen(uid)
imbox.delete(uid)
all_inbox_messages = imbox.messages()
unread_inbox_messages = imbox.messages(unread=True)
for uid,message in all_inbox_messages:
print(message.subject)
print(message.body['plain'])
imbox.mark_seen(uid)
imbox.delete(uid)
![image-20230302221119643](https://i-blog.csdnimg.cn/blog_migrate/a2cc205a6d02cf4a79f91bd8dd88ec0f.png)
微信机器人
![image-20230302222048117](https://i-blog.csdnimg.cn/blog_migrate/8f5e2a3e16f67a38aa6778d08299031d.png)
QQ机器人
![image-20230302222530412](https://i-blog.csdnimg.cn/blog_migrate/b4810f2638e850cafc02345862f74bc9.png)