第十一天内容20180508(open()文件操作)
######open()文件操作######
#1.打开文件、2.操作文件、3.关闭文件
一、基本打开方式(字符串)
open("文件名","模式","编码") #从硬盘中得到0101...二进制数据,然后编码,转换成字符串后输出
1、只读模式:r (默认)
1 f = open("文件名","r") 2 data = f.read() 3 print(data) #-->文件中的内容,指针位于0 4 f.close()
2、只写模式:w (不可读,若文件不存在则创建,存在则情况内容)
1 f = open("文件名","w") 2 f.write("输入写入的内容") #清空原来的内容,写入新的内容 3 f.close()
3、只写模式:x (不可读,若文件不存在则创建,存在则报错)
1 f.open("文件名","x") 2 f.write("输入写入的内容") #若文件存在,则报错 3 f.close()
4、追加模式:a (不可读,不纯在则创建,存在则只追加内容)
1 f.open("文件名","a") 2 f.write("输入追加的内容") 3 f.close()
5、重要重要附加附加(以一下内容打开文件后,不用再关闭,自动执行关闭功能)
with open("文件名","模式","编码") as f, open("文件名","模式","编码") as f1:
二、以"+"的方式操作文件
#"+"表示可以同时读写某个文件
r+,读写【可读,可写】
w+,写读【可读,可写】
x+,写读【可读,可写】
a+,写读【可读,可写】
#f.tell() 获取指针位置
#f.seek(num) 调整指针位置
1、r+(写入新的内容,用于在末尾最佳,指针跳转到最后)
1 f = open("a.txt","r+",encoding="utf-8") ##文件a.txt中内容:中国人 2 #第一次打开文件,指针为0,位于起始位置 3 print(f.tell()) ##输出当前指针位置,为0 4 5 data = f.read() 6 #data = f.read(3) 7 #print(data) -->中国人。因为3表示读取3个字符(在r+b模式下,表示读取3个字节-->中) 8 print(data) -->中国人 #读取指针后面的所有内容。 9 10 print(f.tell()) ##结果为9,指针位于末尾。因为3个汉字(中国人),表示9个字节 11 12 f.write("日本人") ##内容变为:中国人日本人(写入时,指针自动跳转到最后) 13 data = f.read() 14 print(data) ##-->输出为空,因为写入后指针位于末尾处。 15 16 f.seek(0) ##表示指针从第0个位置开始,输出指针后面的内容。seek中的数字表示:字节数 17 data = f.read() 18 print(data) ##-->中国人日本人 19 20 f.close()
2、w+,先清空原来内容,在写入新内容后,就可以读取新内容(文件a.txt中内容:中国人)
先清空,之后写入的内容才能读。写完后指针位于末尾。
1 f = open("a.txt","w+") ##执行open后,执行w+功能,清空原有内容 2 data = f.read() 3 print(data) #-->空内容 4 f.close() 5 6 f = open("a.txt","w+") 7 f.write("董培") 8 data = f.read() 9 print(data) #-->内容为空,因为写入后,指针位于末尾,输出内容为指针后面的内容 10 f.close() 11 ##与上面程序对比 12 f = open("a.txt","w+") 13 f.write("董培") 14 f.seek(0) 15 data = f.read() 16 print(data) #-->内容为:董培,因为seek(0)表示指针从第0个位置输出 17 f.close()
3、x+与w+ 功能一样。但是x+在文件存在时会报错。w+则不会。
4、a+,在open文件后,执行a+,指针跳转到末尾。(文件内容为:董培)
1 f = open("a.txt","a+") 2 print(f.tell()) ##-->输出为6,(指针在末尾处,一个汉字3个字节) 3 data = f.read() 4 print(data) #-->内容为空(指针在末尾) 5 f.close() 6 ##与上面程序对比 7 f = open("a.txt","a+") 8 f.seek(0) 9 data = f.read() 10 print(data) #-->内容为:董培,因为seek(0)表示指针从第0个位置输出 11 f.close()
三、文件操作的常用功能
close、read、write、seek、tell、flush、readline、truncate
1、flush用法,文件内容为:董培
1 f = open("a.txt","a+") 2 f.write("666") 3 flush() 4 f.close() 5 #若没有flush(),则在其他程序读取文件,内容还是为:董培 6 #flush功能为将内存中写入的内容(666),强刷到硬盘 7 #在其他程序读取文件就可以读取到新写入的内容:董培666
2、truncate用法(依赖指针位置),文件内容为:1234567890
1 f = open("a.txt","r+") 2 f.seek(6) #6表示6个字节。一个汉字3个字节,一个字母1个字节 3 f.truncate()#内容变为123456,truncate作用将指针后面内容删除 4 f.close()
3、read用法
f.read() #一次性读取所有内容,返回字符串 f.read(1) #读取1个字符----若以b的形式打开,则读取1个字节
4、readline() #每次读取一行
1 f = open("hello.txt") # 打开hello.txt文件,返回文件对象 2 while True: 3 text = f.readline() # 读取文件指针指向的那一行内容,然后指针下移 4 if text: 5 print(text) 6 else: # 当读取到文件最后一行的下一行,为空字符串"" 7 break 8 9 f.close() # 关闭文件
5、readlines() #一次性读取完毕,将读取的每一行内容存储于列表中
1 f = open("hello.txt") # 打开文件 2 line_list = f.readlines() # 一次性读取所有行,并以列表的形式返回,每一行的内容作为列表的一项 3 for line in line_list: 4 print(line) 5 f.close() # 关闭文件
6、writelines() #写入列表
1 f = open("poet.txt",'a+') #打开poet.txt文件。 2 fruits = ["apple\n","banana\n","orange\n","watermelon\n"] 3 f.writelines(fruits) # 写入列表 4 print("写入成功!") 5 f.close() # 关闭文件
四、os模块的简单使用
1、导入os和os.path模块,利用os.path.exists()方法判断要删除的文件是否存在。然后使用so.remove()删除文件。
1 import os,os.path 2 if os.path.exists("c.txt"): 3 os.remove("c.txt") # 删除文件 4 print("删除成功!") 5 else: 6 print("文件不存在,无法删除!")
2、利用os模块删除某文件夹下所有后缀名为".txt"的文件
1 import os 2 files = os.listdir(".") # 列出指定目录下的所有文件和子目录。。。 “.” 表示当前目录 3 for filename in files: 4 point_index = filename.find(".") # 获取点"."在文件名中出现的索引位置 5 if filename[point_index+1:] == "txt": # 判断当前文件的扩展名是否为"txt" 6 os.remove(filename) # 删除文件
3、利用os模块重新命名。
1 import os 2 os.rename("a.txt","b.mp3") #前面参数为原文件名,后面参数为修改后的文件名 3 print("重命名成功!")
五、发邮件实例
1、主要步骤(以qq邮箱为例)
使用MIMEText封装发送的信息;
使用smtplib模块下的SMTP_SSL类创建发送邮件的客户端对象。
smtp = smtplib.SMTP_SSL("smtp.qq.com",465) #465表示qq邮箱协议的端口
smtp.login(sender,password)
smtp.sendmail("发送者邮箱","接受者邮箱",mimeText对象.as_string())
smtp.quit()
2、代码实例
1 import smtplib 2 from email.mime.text import MIMEText 3 sender = "" # 发送人的QQ邮箱 4 password = "" # QQ的第三方授权码 5 receiver = "" # 接收人的QQ邮箱 6 message = MIMEText("hello , I love learning Python!") 7 message["From"] = sender # 封装发送人邮箱 8 message["To"] = receiver # 封装接收人的邮箱 9 message["Subject"] = "好好学习" 10 smtp = smtplib.SMTP_SSL("smtp.qq.com",465) 11 smtp.login(sender,password) 12 print("登录成功!") 13 smtp.noop() 14 smtp.sendmail(sender,receiver,message.as_string()) # 发送邮件 15 smtp.quit() 16 print("发送成功!")

浙公网安备 33010602011771号