Task01:文件自动化处理打卡

一、文件处理

1.文件与文件路径

在windows上,路径书写是使用倒斜杠’‘作为文件夹之间的分隔符,而在OS X和Linux上,是使用正斜杠’/'作为它们的路径分隔符。通常我们用os.path.join()函数来创建文件名称字符串。

Task01:文件自动化处理打卡_第1张图片

2.当前工作目录

(1)os.getcwd(): 获取当前工作路径
Task01:文件自动化处理打卡_第2张图片
(2)os.chdir: 改变当前工作目录
Task01:文件自动化处理打卡_第3张图片

3.路径操作

(1)绝对路径和相对路径
“绝对路径”:从跟文件夹开始。
“相对路径”:相对于程序的当前工作目录。

  1. os.path.abspath(path): 将相对路径转换为绝对路劲,将返回参数的绝对路径的字符串
  2. os.path.isabs(path): 判断是否是绝对路径,是返回True 和 False。
    Task01:文件自动化处理打卡_第4张图片

4.文件及文件夹操作

(1)用os.makedirs()创建新文件夹
在这里插入图片描述
(2)查看文件大小和文件夹内容
os.path.getsize(path): 返回path参数中文件的字节数
Task01:文件自动化处理打卡_第5张图片
os.listdir(path): 返回文件名字字符串的列表,包含path参数中的每个文件
Task01:文件自动化处理打卡_第6张图片

5.文件读写过程

读写文件3个步骤:

  1. 调用open()函数,返回一个File对象
  2. 调用File对象的read() 或 write() 方法
  3. 调用File对象的close() 方法,关闭该文件

(1)用open()函数打开文件

open函数有8个参数,除了file参数外,其他参数都有默认值。
mode : r, w, a, 对应读、写、追加写入。
buffering: -1, 这是默认值,表示使用系统默认的缓冲机制。
encoding: 用于指定文件的编码方式,如GBK、UTF-8等。

open(file,mode=‘r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

案例:统计字母出现的频率
文件对象有iter、next方法,所以它是一个可迭代对象,可以用for循环遍历。我们可以遍历文件获得每一行字符,再遍历每一行,获得每个字符,将字符放入列表,然后统计每个字符出现的频率。

from collections import Counter
my_list = []
punctuation=',.!?\,。!?、()【】<>《》=:+-*“”...\n'
with open('bacon.txt','r') as f:
    for line in f:
        for word in line:
            if word not in punctuation:
                my_list.append(word)

counter = Counter(my_list)
counter

6.练习

等待更新。。。。。

7.组织文件

shutil模块

shutil模块中包含一些函数,可以在Python程序中复制、移动、改名和删除文件。
(1)复制文件和文件夹
shutil.copy(source, destination):将路径source处的文件复制到路径 destination处的文件夹(source 和 destination 都是字符串),并返回新复制文件绝对路径字符串。
在这里插入图片描述
shutil.copytree(destination,source): 将路径source处的文件夹,包括其包含的文件夹和文件,复制到路径destination处的文件夹,并返回新复制文件夹绝对路径字符串。
在这里插入图片描述
(2)文件和文件夹的移动与改名
shutil.move(source,destination): 将路径source处的文件/文件夹移动到路径destination,并返回新位置的绝对路径的字符串。
在这里插入图片描述
(3)永久删除文件和文件夹
os.unlink(path): 删除path处的文件。
os.rmdir(path): 删除path处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。
shutil.rmtree(path): 删除path处的文件夹,它包含的所有文件和文件夹都会被删除。
Task01:文件自动化处理打卡_第7张图片

8.遍历目录树

os.walk(path): 传入一个文件夹的路径,在for循环语句中使用os.walk()函数,遍历目录树,和range()函数遍历一个范围的数字类似。不同的是,os.walk()在循环的每次迭代中,返回三个值:当前文件夹称的字符串、当前文件夹中子文件夹的字符串的列表、当前文件夹中文件的字符串的列表。
Task01:文件自动化处理打卡_第8张图片

import os
for folderName, subFolders,fileNames in os.walk('D:\\animals'):
    print('The current folder is ' + folderName)
    for subFolder in subFolders:
        print('Subfolder of '  + folderName+':'+subFolder)
    for filename in fileNames:
        print('File Inside '  + folderName+':'+filename)
    print('')   

Task01:文件自动化处理打卡_第9张图片

9.用zipfile模块压缩文件

(1)创建和添加到zip文件

#创建一个new.zip压缩文件,并向其中添加文件
import zipfile  
newZip = zipfile.ZipFile('new.zip','w')
newZip.write('D:\\animals\\Miki.txt',compress_type=zipfile.ZIP_DEFLATED)
newZip.close()


## 2 创建一个example.zip的压缩文件,将animals文件夹下所有文件进行压缩。
import zipfile
import os
newZip = zipfile.ZipFile('example.zip','w')
for folderName, subFolders,fileNames in os.walk('D:\\animals'):
    for filename in fileNames:
        newZip.write(os.path.join(folderName,filename),compress_type=zipfile.ZIP_DEFLATED)
newZip.close()

(2)读取zip文件

import zipfile,os
exampleZip =zipfile.ZipFile('example.zip')
exampleZip.namelist()

Task01:文件自动化处理打卡_第10张图片

exampleZip.close()

(3)从zip文件中解压缩

import zipfile, os
exampleZip = zipfile.ZipFile('example.zip')
exampleZip.extractall('.\zip')
exampleZip.close()

10.文件查找

(1)glob模块
glob是Python自带的一个文件操作相关模块,例如,需要找当前目录下全部的.txt文档。

import glob
glob.glob('*.txt')

在这里插入图片描述
(2)fnmatch模块
fnmatch.fnmatch(filename,pattern): pattern表示匹配条件,测试文件名filename是否符合匹配条件。

import os,fnmatch
path = os.getcwd() # 获取当前代码文件所在目录
for foldname, subfolders,filenames in os.walk(path):
    for filename in filenames:
        if fnmatch.fnmatch(filename,'*[0-9].*'):
            print(filename)

在这里插入图片描述
(3)hashlib模块
当出现重复文件的时候,无法用文件名和文件大小来判断。最简单的办法就是通过MD5来确定两个文件是否一样,以此也可以判断文件是否被篡改过。

import hashlib
m = hashlib.md5()
f = open('bacon.txt','rb')
m.update(f.read())
f.close()
md5_value = m.hexdigest()
print(md5_value)

在这里插入图片描述

二、自动发送电子邮件

Python有两个内置库,smtplib(负责发送邮件)和email(负责构造邮件格式和内容)。

#1 先导入相关的库和方法
import smtplib  #导入库
from smtplib import SMTP_SSL  #加密邮件内容,防止中途被截获
from email.mime.text import  MIMEText   #构造邮件的正文
from email.mime.image import MIMEImage  #构造邮件的图片
from email.mime.multipart import MIMEMultipart   #把邮件的各个部分装在一起,邮件的主体
from email.header import Header   #邮件的文件头,标题,收件人

#2 设置邮箱域名、发件人邮箱、邮箱授权码、收件人邮箱
host_server = 'smtp.163.com' #sina 邮箱smtp服务器                 #smtp 服务器的地址
sender_163 = '[email protected]'                   #sender_163为发件人的邮箱
pwd = 'XXXXX'                   

# 设置接受邮箱,换成自己的邮箱即可
receiver = '[email protected]'  

#3 构建MIMEMultipart对象代表邮件本身,可以往里面添加文本、图片、附件等
msg = MIMEMultipart()    #邮件主体

#4 设置邮件头部内容
mail_title = 'python办公自动化邮件'   # 邮件标题
msg["Subject"] = Header(mail_title,'utf-8')  #装入主体
msg["From"] = sender_163           #寄件人
msg["To"] = Header("测试邮箱",'utf-8') #标题


#5 添加正文文本
mail_content = "您好,这是使用python登录163邮箱发送邮件的测试"   #邮件的正文内容
message_text = MIMEText(mail_content,'plain','utf-8')   #构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
msg.attach(message_text)    # 向MIMEMultipart对象中添加文本对象

#6 添加图片
image_data = open('D:\\animals\\cats\\zophie.jpg','rb')   # 二进制读取图片
message_image = MIMEImage(image_data.read())  # 设置读取获取的二进制数据
image_data.close()       # 关闭刚才打开的文件
msg.attach(message_image)  # 添加图片文件到邮件信息当中去

# 7 添加附件(excel表格)
atta = MIMEText(open('D:\\animals\\cats\\cat.xlsx', 'rb').read(), 'base64', 'utf-8')   # 构造附件
atta["Content-Disposition"] = 'attachment; filename="cat.xlsx"'  # 设置附件信息
msg.attach(atta)       ## 添加附件到邮件信息当中去

#8 发送邮件
smtp = SMTP_SSL(host_server)       #SSL登录  创建SMTP对象
smtp.login(sender_163,pwd)         ## 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
smtp.sendmail(sender_163,receiver,msg.as_string()) # 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
print("邮件发送成功")
smtp.quit         # 关闭SMTP对象

在这里插入图片描述

你可能感兴趣的:(python,自动化)