01项目案例: 文件的备份Demo

02例:拷贝文件


运行:
结果:
02.1例:拷贝二进制文件(图片、音乐)如图片:
要读取二进制文件,比如图片、视频等等,用’rb’, ‘wb’, 'ab’等模式打开文件即可.

运行:
结果:
03例:
国内镜像:pip install -i https://pypi.douban.com/simple pillow
码前提要:

代码如下:
例: 验证码生成器
def draw_code_image(str_code='A34G'):
# 引入绘图模块, Image表示画布对象; ImageDraw表示画笔对象; ImageFont表示字体对象;
from PIL import Image, ImageDraw, ImageFont
# 定义变量,用于画面的背景色、宽、高
# RGB:(255,0,0), (0, 255,0), (0, 0, 255)
bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)
width = 100
height = 25
# 创建画布对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
draw.point(xy, fill=fill)
# 构造字体对象
font = ImageFont.truetype('/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc',
23)
# 构造字体颜色
fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
for index, item in enumerate(str_code):
# print(5 +index*20)) # (5,2) (25, 2), (45,2)
draw.text((5 + (index * 20), 2), item, font=font, fill=fontcolor)
return im
"""
import random
def generate_str_code(length=4):
"""随机生成验证码"""
import string
strings = string.ascii_letters + string.digits
return "".join(random.sample(strings, length))
def draw_code_image(str_code):
"""根据给丁的字符串验证码绘制验证码图片"""
# 引入绘图模块, Image表示画布对象; ImageDraw表示画笔对象; ImageFont表示字体对象;
from PIL import Image, ImageDraw, ImageFont
# 定义变量,用于画面的背景色、宽、高
# RGB:(255,0,0), (0, 255,0), (0, 0, 255)
width = 100
height = 25
white_color = (255, 255, 255)
black_color = (0, 0, 0, 0)
green_color = (0, 255, 0)
# 创建画布对象
im = Image.new('RGB', (width, height), white_color)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(100):
xy = (random.randrange(0, width), random.randrange(0, height))
draw.point(xy, fill=green_color)
# 构造字体对象 shell命令: fc-list :lang=zh
font = ImageFont.truetype('doc/wqy-zenhei.ttc', 23)
for index, item in enumerate(str_code):
# print(5 +index*20)) # (5,2) (25, 2), (45,2)
draw.text((5 + (index * 20), 2), item, font=font, fill=black_color)
return im
if __name__ == '__main__':
str_code = generate_str_code()
# 返回的图片对象
im = draw_code_image(str_code)
im.save('hello.png')
结果:
例:验证码图片生成器
"""
项目需求: 批量验证码图片生成器
1). 可生成数字、大写、小写字母及三者混合类型的验证码
2). 支持自定义验证码字符数量
3). 支持自动调整验证码图片的大小
4). 支持自定义干扰点的数量
5). 支持自定义验证码图文颜色
"""
import os
import random
white_color = (255, 255, 255)
black_color = (0, 0, 0, 0)
green_color = (0, 255, 0)
def generate_str_code(length=4):
"""随机生成验证码"""
import string
strings = string.ascii_letters + string.digits
return "".join(random.sample(strings, length))
def draw_code_image(str_code, item_width=25, height=25, point_count=100,
bg_color=black_color, font_color=white_color):
"""
根据给定的字符串验证码绘制验证码图片
:param str_code:
:param item_width:
:param height:
:param point_count:
:param bg_color:
:param font_color:
:return:
"""
# 引入绘图模块, Image表示画布对象; ImageDraw表示画笔对象; ImageFont表示字体对象;
from PIL import Image, ImageDraw, ImageFont
# 定义变量,用于画面的背景色、宽、高
# RGB:(255,0,0), (0, 255,0), (0, 0, 255)
# 根据验证码的长度自动调整画布的宽度
width = len(str_code) * item_width
# 创建画布对象
im = Image.new('RGB', (width, height), bg_color)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(point_count):
xy = (random.randrange(0, width), random.randrange(0, height))
draw.point(xy, fill=green_color)
# 构造字体对象 shell命令: fc-list :lang=zh
font = ImageFont.truetype('doc/wqy-zenhei.ttc', 23)
for index, item in enumerate(str_code):
# print(5 +index*25)) # (5,2) (25, 2), (45,2)
draw.text((5 + (index * 25), 0), item, font=font, fill=font_color)
return im
if __name__ == '__main__':
from tqdm import tqdm
verifyCodeCount = 100
dirname = 'vCode'
for count in tqdm(range(verifyCodeCount)):
# He3x ===== He3x.png
str_code = generate_str_code(length=10)
# 返回的图片对象
im = draw_code_image(str_code)
# 生成图片文件的绝对路径
filename = os.path.join(dirname, str_code + random.choice(['.png', '.jpg']))
im.save(filename)
print("生成图片验证码成功")
结果:100条验证码

04例:文件批量重命名
- 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
- 将当前img目录所有以.png结尾的后缀名改为.jpg.
import random
import string
import os
from os.path import splitext
def gen_code(len=4):
#随机生成4位验证码
li = random.sample(string.ascii_letters+string.digits,len)
#拼接为字符串
return ''.join(li)
def create_files():
#随机生成100个验证码
li = [gen_code() for i in range(100)]
os.mkdir('img')
for i in li:
os.mkdir('img/' + i + '.png')
create_files()
def modify_suffix(dirname,old_suffix,new_suffix):
#找出以png结尾的文件名
# filter()函数接收一个函数 f 和一个list,得出True的元素
pngfile = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dirname))
#分离文件名和后缀
# os.path.split(‘path’):按照路径将文件名和路径分割开 (2)os.path.splitext()将文件名和扩展名分开,得到一个2维列表
basefiles = [os.path.splitext(filename)[0] for filename in pngfile]
#文件重命名
for filename in basefiles:
# print(filename)
oldname = os.path.join(dirname,filename + old_suffix)
newname = os.path.join(dirname,filename + new_suffix)
# 考虑过 oldname为什么不能直接用pngfile(列表)!类型不同
os.rename(oldname,newname)
print('%s重命名为%s成功' %(oldname,newname))
modify_suffix('img','.png','.jpg')
结果:
04.1批量修改文件名

05 读取一个文件,显示除了以井号(#)开头的行以外的所有行。
法一
filename = 'doc/passwd.bak'
with open(filename) as f:
for line in f:
if not line.startswith('#'):
print(line)
法二
with open('doc/passwd.bak', "r") as file:
for lines in file:
if lines[0] != "#":
print(lines, end="")
结果:
06 制作一个"密码薄",其可以存储一个网址(例如www.csdn.net),和一个密码(例如 123456),请编写程序完成这个“密码薄”的增删改查功能,并且实现文件存储功能。
import os
os.chdir("D:/")
def main():#定义主界面函数
print('''
学生信息管理系统
=============== 功能菜单 ===============
│ 1 增加网址和密码 │
│ 2.删除网址和密码 │
│ 3.修改网址和密码 │
│ 4.查询网址和密码 │
''')
#main()
def add_book():
f = open("book.txt",'w')
web = input("请输入网址:")+'\n'
password = input("请输入密码:")
f.write(web)
f.write(password)
f.close()
#add_book()
def del_book():
book = ""
f = open("book.txt",'r')
web = input("请输入网址:")
password = input("请输入密码:")
fr = f.read()
f.close()
#print(type(fr))
if web in fr and password in fr:
f1 = open("book.txt", 'w')
f1.write(book)
f1.close()
print("删除成功")
else:
print("未找到对应网址或密码,请检查后重试")
#del_book()
def change_book():
f = open("book.txt", 'r')
web = input("请输入旧网址:")
password = input("请输入旧密码:")
fr = f.read()
f.close()
# print(type(fr))
if web in fr and password in fr:
f1 = open("book.txt", 'w')
new_web = input("请输入新网址:") + '\n'
new_password = input("请输入新密码:")
f1.write(new_web)
f1.write(new_password)
f.close()
print("更改成功")
else:
print("未找到对应网址或密码,请检查后重试")
#change_book()
def seek_book():
f = open("book.txt", 'r')
web = input("请输入网址:")
password = input("请输入密码:")
fr = f.read()
f.close()
if web in fr and password in fr:
print("已找到:\n",fr)
else:
print("未找到对应网址或密码,请检查后重试")
#seek_book()
main()
while True:
num = input("请输入操作指令:\n")
num = int(num)
if num == 1:
add_book()
elif num == 2:
del_book()
elif num == 3:
change_book()
elif num == 4:
seek_book()
#print("输入错误,请重新输入")
来源:CSDN
作者:biggirler
链接:https://blog.csdn.net/weixin_44568633/article/details/103554375