Python学习----第十章--文件和异常及json

1.读取文件

lstrip()删除左边空白符。rstrip()删除右边空白符。strip()删除两端空白符。

# #window 读取文件可以用\,但是在字符串中\是被当作转义字符来使用,经过转义之后可能就找不到路径的资源了,
# 例如\t会转义为tab键,,,,这里有两种方法:
# 一:更换为绝对路径的写法
# func1("C:\\Users\\renyc")
# 二:显式声明字符串不用转义(加r)
# func1(r"C:\Users\renyc")这里使用r来告诉

file_path='C:\\Users\\Blessing Lee\\Desktop\\pi.txt'     #绝对路径
#file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明

with open(file_path) as file_object:     #open打开文件并返回一个表示文件的pi.txt文件对象,
    message=file_object.read()           #Python将这个对象存储在后面的变量file_object中
    print(message)                       #有了文件的对象后,read读取它并把它作为长字符串存储在变量message中

----------------------------------------------------------------
#如果文件是在该代码同一目录下,则可使用:
with open('pi.txt') as file_object:

----------------------------------------------------------------
#相比于原始文件,read()输出会在末尾多一个空行,因为read()到达文件末尾时返回一个空字符串,而将这
#个字符串显示出来就是一个空行。
#删除空行可在print()中使用rstrip()方法:

print(message.rstrip())          #使用rstrip()删除多余空行

2.访问文件中每一行的内容

file_path='C:\\Users\\Blessing Lee\\Desktop\\pi.txt'     #绝对路径
#file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path) as file_object:
    for line in file_object:          #通过文件对象执行循环遍历文件中的每一行
        print(line)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926
                      #发现输出会多很多空行,因为在这个文件中每行末尾都有一个换行符,而print语句也会加上一个换行符,                    
535                   #因此末尾两个换行符:一个人来自文件,一个来自print
----------------------------------------------------
#可使用strip()来消除换行,例如:print(line.strip())

3.创建一个包含文件各行内容的列表

使用with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外访问这些文件的内容时,可在with代码块内将文件各行存储在一个列表中。例如:

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path) as file_object:                    #一模一样,前面都不需要变
       lines=file_object.readlines()    #使用Readlines()从文件中读取每一行并将其存储在一个列表中,该列表存储到变量lines中
for line in lines:                      #在with代码块外循环遍历lines,访问文件中的内容
    print(line.strip())
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926
535

4.使用文件中的内容

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path) as file_object:                    #这里从来就没变过
       lines=file_object.readlines()                    #逐行读取文件内容并将其以列表方式存储在lines中
pi_string=''                                            #设置pi为一个空字符串先
for line in lines:
    pi_string+=line.strip()                             #pi=pi加遍历后去空格的文件内容
print(pi_string)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926535                                         #去掉换行后生成这样咯

#如果你的文件够大,或者你只想显示部分可以使用切片,例如print(pi_string[:5])显示前5位结果为:pi=3.141

#此时生成的pi依旧是字符串,因为Python读取所有文本都解读为字符串,如果你要将其用作数值,
#可使用int()转换为整数,或者使用float()转换为浮点数

5.replace()方法,将字符串中特定的单词替换为另一个单词

message="I really like dogs."
print(message.replace('dog','cat'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I really like cats.            #简直黑科技啊,不仅能将dogs变成cats,就连没有加s的都能给你变了
                               #它检测到你想要变的字符就和你输入字符一样的全给替换

print(message.replace('do','cat'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I really like catg.           #这里就是将cat与do替换了而已

6.写入文件

使用'w'模式时千万小心,如果你写入的文件不存在,open()函数会自动给你创建它,但是要是有这个文件的话,Python将在返回文件对象前清空该文件。尼玛,里面原来的内容全给你删了

python只能将字符串写入文本文件。要将数值数据存储到文本中必须先使用函数str()将其转换为字符串格式

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path,'w') as file_object:    #open()中两个实参,file_path文件路肩的对象,‘w’告诉python以写入模式打开这个文件
    file_object.write("i love dog!"

#结果:我的pi.txt文件中只剩下一句 i love dog!    ,之前的文件内容全没了
---------------------------------------------------------------------
    file_object.write("i love cat!")        #写入多行如果不换行的话内容挤在一起的
#结果:i love dog!i love cat!                #可使用\n,例如:file_object.write("i love dog!\n")

7.附加到文件

打开文件时可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)以及能够读取和写入的模式(‘r+’),如果省略这个参数的话python将以默认的只读模式打开文件。

如果想给文件添加内容而不是想‘w’模式那样覆盖原有的内容,可采用附加模式。它会将你写的内容添加到文件内容的末尾。

如果文件不存在,它也是会给你创建一个文件的。

file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt'       #加r声明
with open(file_path,'a') as file_object:
    file_object.write("\nthis is my add contents!!!!")
    file_object.write("\n中午了外卖还不到,快要饿死了!!")

#文件中内容>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
i love dog!i love cat!
this is my add contents!!!!
中午了外卖还不到,快要饿死了!!

8.异常处理:使用try--except代码块处理异常

使用try--except代码块让Python在执行指定的操作,同时告诉Python遇到异常时该怎么做。使用try--except代码块时即使出现异常程序也将继续运行,显示你编写的友好错误提示或者执行你编写的发生错误时的代码。

#处理ZeroDivisionError异常(分母不能为0)
try:
    print(5/0)
except ZeroDivisionError:             #当出现ZeroDivisionError就执行except下的语句
    print("分母不能为0")               #这里告诉Python当程序遇到错误时输出提示分母不能为0
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
分母不能为0

-----------------------------------------------
#处理FileNotFoundError异常(文件找不到)
filename='test.txt'
try:
    with open(filename) as flie_job:
        message=file_job.read()
except FileNotFoundError:
    mes="文件"+filename+"找不到!"
    print(mes)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
文件test.txt找不到!

9.else代码块

通常将可能发生错误的代码放到try--except中,而其它依赖于try代码块成功执行的代码都应该放入else代码块中,例如:

print("输入两个数字我将对它们进行除法运算!\n")
while True:
    fist_num=input("请输入除数:")
    second_num=input("请输入被除数:")
    try:
        anser=int(fist_num)/int(second_num)      #可能出现错误的代码放入try代码块中
    except ZeroDivisionError:                    #except代码块对遇到错误时执行应对措施
        print("分母不能为0")
    else:                                        #如果以上代码都没问题那就正常执行else块
        print(str(fist_num)+"/"+str(second_num)+"="+str(anser))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
输入两个数字我将对它们进行除法运算!

请输入除数:5
请输入被除数:2       
5/2=2.5          #当输入的都没问题时,执行else代码块
请输入除数:5
请输入被除数:0          
分母不能为0       #当输入分母为0时,程序遇到错误,执行except下的代码块
请输入除数:

10.失败时不报错,可以在except代码块下执行pass,使程序在遇到该错误时什么都不做,继续执行其他不会报错的代码

#就直接在except代码下写pass,例如文件找不到错误:
try:
    .......
except FileNotFoundError:
    pass
else:
    .......

11.split()方法,它根据一个字符串创建一个单词列表。然而,它只能分割单词,并不能将一中文分成单个的字存储,例如:

#split()方法的使用:       
mes_e="i want rich!"                              #英文
print(mes_e.split())
mes_c="我想有钱!你连中文都不能分割。你有用吗?"        #中文
print(mes_c.split())
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
['i', 'want', 'rich!']     #英文的列表里就分成了三个单词
['我想有钱!你连中文都不能分割。你有用吗?']     #中文的还是将一句话分成一个列表元素

12.json存储数据,使用json.dump()和json.load()

#1.使用json.dump()来存储数字列表:
import json                 #导入json模块
numbers=[1,2,3,4,5]         #创建一个数字列表
filename='numbers.json'     
with open(filename,'w')as fil_job:   #open写模式
    json.dump(numbers,fil_job)       #使用json.dump()将numbers写入fil_job指向的文件中
#文件中内容>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1,2,3,4,5]

-------------------------------------------------------------------------------------------
#使用json.load()将这个列表读取到内存:
import json
filename='numbers.json'
with open(filename) as fil_job:
    numbers=json.load(fil_job)
print(numbers)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1,2,3,4,5]

案例:如果一切存储了用户名,就加载它,否则提示用户输入用户名

import json
#如果之前存储过用户,就加载它,否则提示用户输入并存储
filename='username.json'
try:
    with open(filename) as fil_job:
        username=json.load(fil_job)
except FileNotFoundError:
    username=input("what is your name?")
    with open(filename,'w') as fil_job:
        json.dump(username,fil_job)
        print("i will remember you"+username)
else:
    print("welcome back,"+username)

13.重构

将代码划分一系列完成具体工作的函数。重构让代码更清晰、更易于理解、更容易扩展。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值