前言
是在原有文章的基础上直接扩充更新还是将其作为单独的系列文章呢?思虑再三,还是决定把接下来的Day01-Day05的总结独立出来。此系列是关于《Python编程:从入门到实践》的总结,亦可看作是在我上一篇文章的基础上的加强版本,所以大家看到有些部分没有从浅入深的一个过程或者是没头没脑也请不要惊讶。由于笔者(没错就是我)水平实在有限,欢迎大家在评论区或者私聊我进行批评指正,闲话少说,我们开始吧。
《Python编程:从入门到实践》总结_Day01
《Python编程:从入门到实践》总结_Day02
《Python编程:从入门到实践》总结_Day03
《Python编程:从入门到实践》总结_Day04
《Python编程:从入门到实践》总结_Day05
上一篇文章请见《编程小白的第1本Python入门书》总结
-
Here!
1. 文件
1.1 打开&读取&文件
with
关键字
该关键字是python会将打开的文件在使用后将其关闭。python自会选择比较合适的关闭时机,而不需要我们手动关闭。open():
该函数用于打开文件,其中参数是文件所在的路径以及文件名称。
with open(filename) as open_file:
- read():
读取打开的文件中的内容,由于该方法在到达文件尾的时候返回一个空字符串,而这个字符串打印出来显示就是一个空格。(可用rstrip()函数将其删掉)
contents = object_file.read()
- 逐行读取数据
1、可使用for循环,for循环是每次读取一条语句,并可对其进行操作。
with open("pi_digits.txt") as object_file:
for line in lines:
line_substitute = line.replace("Python", "c")
print(line_substitute)
2、readline()方法,该方法以条为单位,一次性读取所有语句。
with open("pi_digits.txt") as object_file:
lines = object_file.readlines()
1.1 写文件
-
write()
:
首先要在打开文件的后面定义一个写入模式的参数,若文件中之前存在内容,则新写入的数据会覆盖之前文本中的数据(在返回对象前清空文件)。
⚠️:Python只能将字符串写入文本中,写入文件不会像读取文件那样在文本末尾添加换行符,所以在写入多行数据的时候,需要添加换行符。
with open(filename, "w") as file_object:
file_object.write("I really love programming\n")
file_object.write("I love programming.")
- 附加模式
给原有文件添加内容,而不是覆盖原有文件,写入的时只需将打开文件的参数改为“附加模式”(a)即可,其余的操作方式与覆盖式写入模式一致。
with open(filename, "a") as file_object:
file_object.write("I really love programming\n")
file_object.write("I love programming.")
2. 异常处理
异常处理的必要与好处我根据书中所说总结有如下几点:
1、可以尽量避免程序的崩溃使不懂技术的用户困惑;
2、可以避免攻击者因为程序的错误而获得你的程序中的部分信息,进而攻击你的代码;
3、程序不会因为在运行过程中出现异常而终止程序;
- try-except代码块:
用来捕获异常,告知python,若是这些代码中引发了异常,该怎么办
try:
print(5/0)
except:
print("You can't divide by zero")
我结合上面的代码来解释一下,上面的代码块所表达的是,如果try
中的代码块运行成功,那么代码会跳过except
代码块中的内容,然后继续向下执行。而若是try
中的代码块运行的错误,那么会输出except
代码块中的内容,然后继续向下执行。
- try-except-else代码块:
Python尝试执行try
中的代码块,except
代码块会在try
中的代码运行出现错误时运行(不会运行else
代码块)。而若是在try
代码块运行成功之后才会执行else
中的代码块。
try:
print(5/0)
except:
print("You can't divide by zero")
else:
print("Mr_Hou")
可以修改try
代码块中的除数,通过控制try
中的代码块正确与错误,再结合不同情况下的输出来学习这个知识。
3. JSON格式
关于这部的知识我觉得网上的的解答比书中的更加清晰和简洁明了,更能直击其本质。
json文件是什么
第一种类型是标量scalar,也就是一个单独的字符串string或数字numbers,比如“成都”这个单独的词。
第二种类型是序列sequence,也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组array,或者列表list,比如“成都,重庆”。
第三种类型是映射mapping,也就是一个名/值name/value,即数据有一个名称,还有一个与之相对应的值,这又称作散列hash或字典dictionary,比如“蓉城:成都”。
1.并列的数据之间用逗号(,)分隔;
2.映射用冒号(:)表示;
3.并列数据的集合(数组)用方括号([])表示;
4.映射的集合(对象)用大括号({})表示
以上四条规则,就是json格式的所有内容。
-
json.dump()
::将数据存储为json格式。
with open(filename, "w") as obj_file:
json.dump(user_number, obj_file)
-
json.load()
:将json格式的数据加载进内存来使用。
with open(filename) as open_file:
favorite_name = json.load(open_file)
4. 重构
在代码可以正常运行基础上,将代码划分为一系列完成具体工作的函数。可以让代码更清晰、易于理解和扩展。
5. 问题
在学习到异常处理的部分的时候,这种捕获异常的方式让我联想到if...else
代码块,在我看来二者之间非常相似(好吧,我不得不承认,“非常相似”这个词是我总结时候写的,当时给我的感觉就是,这TM不就是一摸一样嘛!!),所以我在网上搜索到的一篇博客回答了我的疑问:
if..else在计算机里执行的时候是有条件的,也就是根据一个具体的条件执行,只有判断这个条件的真假才能进行下一步的操作,也就是我们所说的流程控制,条件为真时走操作1,为假时走操作2。
而try..catch则是用于捕获异常,常用于我们一段代码可能会有异常的时候使用,程序执行时永远先走try,出错的时候才会走catch抛出异常。
关于if..else和try..catch的区别
虽然这篇文章解答的是try...catch
与if...else
代码块之间的区别,但是我觉得原理应该是一样的,故放上引用供大家参考。