前言
一些关于python的小实践
一、python实现合并pdf
import poimage
from PyPDF2 import PdfReader, PdfWriter
from tqdm import tqdm
def merge2pdf(one_by_one, output):
"""
@Author & Date : CoderWanFeng 2022/5/16 23:33
@Desc : merge_pdfs(paths=['开篇词.pdf', '中国元宇宙白皮书 (送审稿).pdf'], output='merge.pdf')
"""
pdf_writer = PdfWriter()
for path in one_by_one:
pdf_reader = PdfReader(path)
# for page in tqdm(range(pdf_reader.getNumPages())):
for page in simple_progress(range(len(pdf_reader.pages))):
# 把每张PDF页面加入到这个可读取对象中
# pdf_writer.addPage(pdf_reader.getPage(page))
pdf_writer.add_page(pdf_reader.pages[page])
# 把这个已合并了的PDF文档存储起来
with open(output, 'wb') as out:
pdf_writer.write(out)
def simple_progress(base, desc=None, log=True):
if log and desc:
return tqdm(iterable=base, desc=desc)
elif log:
return tqdm(iterable=base)
else:
return base
if __name__ == '__main__':
merge2pdf(one_by_one=[r'D:\test1.pdf', r'D:\test2.pdf'], output=r'D:\output.pdf')
提示:需要安装PyPDF2 等库
pip install PyPDF2
二、python图片添加水印
import poimage
from PyPDF2 import PdfReader, PdfWriter
from tqdm import tqdm
def add_watermark(file, mark, output_path='./', color="#eaeaea", size=30, opacity=1, space=200,
angle=30):
"""
给图片加水印
Args:
file: 图片位置
mark: 水印内容
output_path: 输出位置
color: 水印颜色
size: 水印大小
opacity: 不透明度,0.01~1
space: 水印间距
angle: 水印角度
Returns:
"""
poimage.add_watermark(file, mark, output_path, color, size, opacity, space, angle)
if __name__ == '__main__':
add_watermark(file=r'C:\Users\e2e\Pictures\Screenshot 2024-01-10 101054.png', mark='Wenhaofu')
poimage.del_watermark(
input_image=r"E:\pdf\MicrosoftTeams-image (62).png",
output_image=r'E:\pdf\del_watermark.jpg')
三、python实现web
目标通过Django实现,web里面插入图片视频,并进行简单的排版和描述。
1.Django的安装
pip install django
2.创建项目
2.1 通过终端创建
1.打开终端
2.进入某个目录(项目放在哪就去哪,最好不要出现中文,防止编码问题)
3.执行命令来创建项目
django-admin.exe startproject track_chart_web
比如我们创建项目名为track_chart_web的django项目,输入django-admin.exe startproject track_chart_web,即可看到自动生成的目录结构,此时django项目就创建成功了:
3.创建APP
这里的APP不是手机应用那个APP,而是一部分功能的意思。一个Django项目可能需要处理多个业务,我们将业务拆解,一部分一部分分开来管理代码会比较有条理,所以可以通过创建多个app来分别实现多个业务功能。
用Pycharm打开命令行界面(通过cmd打开也行,不过每次打开都要切换到当前项目路径下,很麻烦,所以最好直接用Pycharm的命令行界面直接打开),然后输入指令python manage.py startapp app名(通过manage.py来创建app)。
python manage.py startapp index
4.快速上手
4.1 确保注册app
在前面3. 创建APP中,我们只是创建的app,但是这样还是不能正常跑起来app中的功能的,我们还得让Django知道,我们写了一个新app,这个声明的过程就是app的注册。此过程需要修改settings.py,过程如下:
1. 找到settings.py,在列表变量INSTALLED_APPS中,添加一个’ ',准备添加新app(我这里app名为index,大家不同app名需要相应的替换一些代码)
2. 我们打开新app目录,查看其apps.py内容
3. 我们需要调用这个类,所以用到我们导入模块的知识点通过.来找到相应文件中的类,所以在第一步写的’'中应该写上
4.2 URL和函数的映射
大家使用网站时,在网站内的页面跳转都会改变URL,不同的URL就需要后台调用不同的功能给用户使用。所以每个URL都得有函数来执行相应的代码。此过程需要修改urls.py,过程如下:
找到urls.py中列表变量urlpatterns,添加一行path(‘’, )
4.3 视图函数的撰写
4.3.1 render()使用
正常应用中,网页都得是html那些文件,我们这现在还是就单纯返回字符串,太单调了。
那我们return后面就不用HttpResponse()了,而是用render()。render()的用法是这样。
# 导入render,一般django默认
from django.shortcuts import render,HttpResponse
def feedback(request):
# 第一个位子是视图函数的request参数,第二个参数位是html文件路径
return render(request,"goods_list.html")
4.3.2 模板路径问题
一开始我们改过了settings.py中TEMPLATES字典的DIRS的值为空列表,所以默认的模板路径是当前app文件夹下的templates文件夹中的文件。所以我们在app下创建名为templates的文件夹(必须得为templates
,不要拼写错误!),并在templates文件夹下创建html文件。
设置函数和URL对应关系,就可以测试是否可以正常渲染模板文件。
4.3.3 静态文件static
开发过程中,像图片、css、js这些文件都称为静态文件,而这些静态文件,在django项目中也是必须放在规定文件夹中的,这个文件夹必须得叫static,和templates一样不能出现拼写错误。为了方便查找,static中,我们再分img、css、js、plugins来分类存放不同的东西。
我们可以把图片、视频等文件放到img
文件夹下面。
4.3.4 html文件编写
例如:我想导入视频和图片,并对其简单排版和添加描述,有如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
align-items: center;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.item {
width: calc(25% - 20px);
margin: 10px;
box-sizing: border-box;
}
.video-container, .image-container {
position: relative;
overflow: hidden;
}
video, img {
width: 100%;
height: auto;
object-fit: cover;
}
.description {
text-align: center;
font-size: 16px;
padding: 10px;
background-color: rgba(0, 0, 0, 0.7);
color: white;
margin-top: 10px;
}
</style>
<title>视频与图片展示</title>
</head>
<body>
<div class="container">
<!-- 视频部分 -->
<div class="item">
<div class="video-container">
<video width="320" height="240" controls>
<source src="/static/img/4.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<div class="description">这是视频的描述</div>
</div>
</div>
<!-- 图片部分 -->
<div class="item">
<div class="image-container">
<img src="/static/img/1.png" alt="图片1描述">
<div class="description">图片1:这是第一张图片的详细描述。</div>
</div>
</div>
<div class="item">
<div class="image-container">
<img src="/static/img/2.jpg" alt="图片2描述">
<div class="description">图片2:这是第二张图片的详细描述。</div>
</div>
</div>
<div class="item">
<div class="image-container">
<img src="/static/img/3.jpg" alt="图片3描述">
<div class="description">图片3:这是第三张图片的详细描述。</div>
</div>
</div>
<div class="item">
<div class="image-container">
<img src="/static/img/4.jpg" alt="图片4描述">
<div class="description">图片4:这是第四张图片的详细描述。</div>
</div>
</div>
</div>
</body>
</html>
修改templates
下面的html即可。
4.4 运行Django
python manage.py runserver
http://127.0.0.1:8000/feedback/
浏览器输入http://127.0.0.1:8000/feedback/
即可访问。
四、python实现URL转二维码
代码如下:
import qrcode
if __name__ == '__main__':
# 创建二维码对象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# 添加数据(这里是网址)
url = 'https://www.baidu.***/'
qr.add_data(url)
qr.make(fit=True)
# 保存为PNG文件
img = qr.make_image(fill='black', back_color='white')
img.save('my_qrcode.png')
生成的二维码如下所示: