文件读写

概述

方法:open(文件名,模式(读写),编码方式,newline=‘’)

模式:

  1. 读写模式
    r(只读,文件不存在 – 报错)
    w(只写,文件不存在 – 自动创建;文件存在 – 内容清空)
    a(追加,文件不存在 – 自动创建;文件存在 – 追加内容)
  2. 文件内容类型模式
    t – 以字符串形式读写文件(默认,可写可不写)
    b – 以二进制形式读写文件(图片、音频、视频等)

模式怎么用

rt,rb,tr,br,wt,wb,at,ab,tw,ta,bw,ba等都可以

编码方式:
一般使用utf-8,并且文件写入编码和读取编码要保持一致

方法:newline = ‘’ – 表示换行形式
mac、windows、linux三种操作系统默认的换行符不一致,同一代码在不同操作系统展示的效果不同,所以用newline统一

一.txt文件读写

  1. 使用文本写模式以及utf-8编码创建一个对象
f1 = open('这里是文件名.txt','w',encoding='utf-8',newline='')
  1. 写入内容
f1.write('这里是内容\n')
  1. 保存关闭
f1.close()
# f1.write('aaaa')  #ValueError: I/O operation on closed file.
# 关闭之后不能再写内容,会报错

读模式不需要添加newline=‘’

  1. 打开一个txt文件
f2 = open('静夜思.txt','r',encoding='utf-8')
  1. 读取文件内容
    read:一次性全部读取
    readline:一次只读一行
    readlines:一次性全部读取出来是一个列表,
    每一行是一个元素,接着上一次读完的位置继续读
# print(f2.read())
print(f2.readline())
print(f2.readlines())
  1. 保存关闭和写一样

练习

例:将一本小说的所有换行和空格等空白符号去除

思路:结合字符串的操作方法

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()

发送邮件

概述

  1. 正常邮件发送流程
    登录邮箱(和邮箱服务器通信,登录账号密码)
    写邮件(收件人、抄送人、(密送人)、主题、正文、附件等)
    发送(发件人)
  2. python操作邮箱
    将固定部分内容写死,变动部分内容手动输入,使用命令发送邮件
    python内置了两个模块:
    smtplib – 负责通信
    email – 负责构建邮件信息(收件人、抄送人、发件人、主题、正文、附件等)
  3. 协议
    SMTP协议:simple mail transfer protocol – 简单邮件传输协议
    SSL协议:加密
  4. 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(正文,类型,编码)

类型:
  1. 单独写:
    文字 – plain ; 图片 – image ; 音频 – audio ; 视频 – video ; html文件 – html
  2. 综合写:
    图片、音频、视频、压缩包、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