在windows上,路径书写是使用倒斜杠’‘作为文件夹之间的分隔符,而在OS X和Linux上,是使用正斜杠’/'作为它们的路径分隔符。通常我们用os.path.join()函数来创建文件名称字符串。
(1)os.getcwd(): 获取当前工作路径
(2)os.chdir: 改变当前工作目录
(1)绝对路径和相对路径
“绝对路径”:从跟文件夹开始。
“相对路径”:相对于程序的当前工作目录。
(1)用os.makedirs()创建新文件夹
(2)查看文件大小和文件夹内容
os.path.getsize(path): 返回path参数中文件的字节数
os.listdir(path): 返回文件名字字符串的列表,包含path参数中的每个文件
读写文件3个步骤:
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
等待更新。。。。。
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处的文件夹,它包含的所有文件和文件夹都会被删除。
os.walk(path): 传入一个文件夹的路径,在for循环语句中使用os.walk()函数,遍历目录树,和range()函数遍历一个范围的数字类似。不同的是,os.walk()在循环的每次迭代中,返回三个值:当前文件夹称的字符串、当前文件夹中子文件夹的字符串的列表、当前文件夹中文件的字符串的列表。
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('')
(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()
exampleZip.close()
(3)从zip文件中解压缩
import zipfile, os
exampleZip = zipfile.ZipFile('example.zip')
exampleZip.extractall('.\zip')
exampleZip.close()
(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对象