文件读写
概述
方法:open(文件名,模式(读写),编码方式,newline=‘’)
模式:
- 读写模式
r(只读,文件不存在 – 报错)
w(只写,文件不存在 – 自动创建;文件存在 – 内容清空)
a(追加,文件不存在 – 自动创建;文件存在 – 追加内容) - 文件内容类型模式
t – 以字符串形式读写文件(默认,可写可不写)
b – 以二进制形式读写文件(图片、音频、视频等)
模式怎么用
rt,rb,tr,br,wt,wb,at,ab,tw,ta,bw,ba等都可以
编码方式:
一般使用utf-8,并且文件写入编码和读取编码要保持一致
方法:newline = ‘’ – 表示换行形式
mac、windows、linux三种操作系统默认的换行符不一致,同一代码在不同操作系统展示的效果不同,所以用newline统一
一.txt文件读写
写
- 使用文本写模式以及utf-8编码创建一个对象
f1 = open('这里是文件名.txt','w',encoding='utf-8',newline='')
- 写入内容
f1.write('这里是内容\n')
- 保存关闭
f1.close()
# f1.write('aaaa') #ValueError: I/O operation on closed file.
# 关闭之后不能再写内容,会报错
读
读模式不需要添加newline=‘’
- 打开一个txt文件
f2 = open('静夜思.txt','r',encoding='utf-8')
- 读取文件内容
read:一次性全部读取
readline:一次只读一行
readlines:一次性全部读取出来是一个列表,
每一行是一个元素,接着上一次读完的位置继续读
# print(f2.read())
print(f2.readline())
print(f2.readlines())
- 保存关闭和写一样
练习
例:将一本小说的所有换行和空格等空白符号去除
思路:结合字符串的操作方法
f1 = open('这里是小说名.txt','rt',encoding='utf-8')
result = f1.read()
f1.close()
print(result.replace('\n', '').replace(' ',''))
Tips:time模块的使用
import time
start = (time.time())
end = (time.time())
print('程序一共花费%.2f秒'% (end - start))
二.视频读写
读取
把视频音频等文件转码为二进制进行读取
注:字节: b’xxxxx’ --> 字节是二进制形式的一种
f1 = open('这里是视频名.mp4','rb')
result = f1.read()
print(result)
f1.close()
将视频写入本地
f2 = open('这里是新视频名.mp4','wb')
f2.write(result)
f2.close()
发送邮件
概述
- 正常邮件发送流程
登录邮箱(和邮箱服务器通信,登录账号密码)
写邮件(收件人、抄送人、(密送人)、主题、正文、附件等)
发送(发件人) - python操作邮箱
将固定部分内容写死,变动部分内容手动输入,使用命令发送邮件
python内置了两个模块:
smtplib – 负责通信
email – 负责构建邮件信息(收件人、抄送人、发件人、主题、正文、附件等) - 协议
SMTP协议:simple mail transfer protocol – 简单邮件传输协议
SSL协议:加密 - 465端口
所有邮件必须经过465端口发送(保密级别很低)
smtp.qq.com、smtp.163.com等
1.正文
导包
import smtplib
from email.mime.text import MIMEText
发件人
sendADDress = '这里写发件人邮箱'
密码(授权码)
password = '这里写发件人邮箱对应的第三方使用授权码'
连通服务器(以QQ邮箱为例)
server = smtplib.SMTP_SSL('smtp.qq.com',465)
登录
loginResult = server.login(sendADDress,password)
邮件正文
content = """
尊敬的xxx:
xxxxxxx
敬礼!
"""
语法:MIMEText(正文,类型,编码)
类型:
- 单独写:
文字 – plain ; 图片 – image ; 音频 – audio ; 视频 – video ; html文件 – html - 综合写:
图片、音频、视频、压缩包、word文档等 – base64
msg = MIMEText(content,'plain','utf-8')
发件人、收件人、抄送人昵称;主题
msg['From'] = '发件人昵称'
msg['To'] = '收件人昵称'
msg['Cc'] = '抄送人昵称'
msg['Subject'] = '主题'
# as_string() --> 将邮件内容转成字符串(中文被编码过)
print(msg.as_string())
发送邮件
语法:
sendmail(发件人账号(字符串),收件人账号(字符串列表),邮件内容(字符串类型)
server.sendmail(sendADDress,getEmail,msg.as_string())
2.添加附件
导包
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
在正文后添加附件
注:图片音频视频都可以,格式记得写对
# 这是一个能够添加附件的邮件对象
msg = MIMEMultipart()
photo = MIMEText(open('图片.jpg','rb').read(),'base64','utf-8')
# 告诉邮箱如何处理相应结果,将附件在邮件中显示出来(filename后面不能有中文)
photo['Content-Disposition'] = 'attachment;filename="photo.jpg"'
msg.attach(photo)
注:其余没写的部分和1.正文里面一样
3.python自动化
把一些变动的部分用input语句代替
如:
msg['From'] = input('输入邮件的发件人昵称:')
msg['To'] = input('输入邮件的收件人:')
msg['Cc'] = input('输入邮件的抄送人:')
msg['Subject'] = input('输入邮件的主题:')
# 还可以对输入的邮箱进行判断
getEmail = []
while True:
email = input('请输入收件人邮箱账号(输入0结束):')
if email != '0':
getEmail.append(email)
else:
break