第十一天内容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("发送成功!")
代码实例

 

posted @ 2018-05-08 17:53  Monomania丶pp  阅读(127)  评论(0)    收藏  举报