1.读写文件
1.1 写一个文本文件text:内容为西安培华学院,读取文本文件的内容,复制这个文件text,拷贝为text2
str_data = "西安培华学院"
data1 = open('text', 'w', encoding='UTF-8')
# 以写的方式打开并创建一个text文件
result1 = data1.write(str_data)
data1.close()
data2 = open('text', 'r', encoding='UTF-8')
# 以读的方式打开text文件
result2 = data2.read()
print(result2)
data2.close()
with open('text2', 'w', encoding='UTF-8') as data3:
# 将读的text文件的内容写入text2文件中
data3.write(result2)
1.2 找一张图片,复制这个图片到copy.jpg
data = open('1.jpg', 'rb')
result = data.read()
data.close()
data2 = open('copy.jpg', 'wb')
result2 = data2.write(result)
data2.close()
1.3 给定一个列表[“string1”, “string2”, “string3”],将列表内容写入文件,每一个元素一行
list_data = ["string1", "string2", "string3"]
with open('work', 'w') as file_obj:
file_obj.write('\n'.join(list_data))
2. 异常
2.1 异常的完整格式,以及每个部分的意思
try:
要执行语句(有可能遇到异常)
a + b => 1 + 1 正常执行
=> 1 + "1" 执行的时候遇到异常
except [异常类型(可以省略) as name(变量赋值name)]:
做异常处理的语句
except 异常类型2:
处理2
except 异常处理3:
处理3
else:
try中的语句正常执行,要执行操作
finally:
始终都要的做的语句
# except 捕获, 异常类型: 捕获哪一种异常
# as name: 是将捕获到异常赋值给name(变量),那就可以用name去访问异常
### 2.2 常遇见的>=5种异常的处理
TypeError,KeyError,ValueError,IndexError,Exception
```py
try:
1 + '1'
1 + 1
except ZeroDivisionError:
print('ZeroDivisionError')
except IndexError:
print('IndexError')
except KeyError:
print('KeyError')
except ValueError:
print('ValueError')
except Exception:
print('最后捕获')
else:
print(1+1)
finally:
print('Finally')
#执行结果 由于在前四次中未能捕获异常,在第五次捕获到异常
最后捕获
Finally
进程已结束,退出代码0
2.3 以及用异常处理来进行读写文件的文件关闭
try:
file_obj = open("1.txt", "w")
file_obj.write("123")
1 / 0
except:
print("处理异常")
finally:
file_obj.close()
print("Finally")
#执行结果
处理异常
Finally
进程已结束,退出代码0
2.4 如何主动抛出异常
使用raise可以强制抛出一个异常,当try中语句可以正常执行时,可以使用raise强制抛出一个我们想要处理的异常类型,然后在except中捕获去处理异常。
try:
1
raise IndexError
except IndexError:
print("Handle Index Error")
#执行结果为
Handle Index Error
3.模块和包
3.1 什么叫模块?
退出 Python 解释器后,再次进入时,之前在 Python 解释器中定义的函数和变量就丢失了。因此,编写较长程序时,建议用文本编辑器代替解释器,执行文件中的输入内容,这就是编写脚本。随着程序越来越长,为了方便维护,最好把脚本拆分成多个文件。编写脚本还有一个好处,不同程序调用同一个函数时,不用每次把函数复制到各个程序。
为实现这些需求,Python 把各种定义存入一个文件,在脚本或解释器的交互式实例中使用。这个文件就是 模块 ;模块中的定义可以 导入 到其他模块或 主 模块(在顶层和计算器模式下,执行脚本中可访问的变量集)。
模块是包含 Python 定义和语句的文件。其文件名是模块名加后缀名 .py 。在模块内部,通过全局变量 __name__ 可以获取模块名(即字符串)。
3.2 如何导入模块,如何导入模块中的具体内容
导入模块的语法:
import module_name #import 模块名
import module_name1, module_name2 #import 模块1,模块2…
如果你要调用模块中内容,怎么调用
module_name.变量/函数/类 #模块名.变量/函数/类
module_name.function_name() #从module_name模块中调用function_name()函数
from module_name import function_name
直接调用function_name
from module_name import * (一般情况不推荐使用)
*: 所有, 但是还是有限制
导入所有不以下划线(_)开头的名称
3.3 import语句的实质是什么?
python中import的实质相当于把被导入的模块执行一遍,此时我们可以在主模块中调用hct模块中的语句.相当于先把hct模块执行一遍,然后调用。
import hct
print(hct.list_data)
#hct模块中的语句
list_data = [1, 2, 3]
print('111')
print(list_data)
#执行结果
111
[1, 2, 3]
[1, 2, 3]
进程已结束,退出代码0
3.4 什么是包,包和目录的区别,init.py的作用
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。
就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。
这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。
不妨假设你想设计一套统一处理声音文件和数据的模块(或者称之为一个"包")。
现存很多种不同的音频文件格式(基本上都是通过后缀名区分的,例如: .wav,:file:.aiff,:file:.au,),所以你需要有一组不断增加的模块,用来在不同的格式之间转换。
并且针对这些音频数据,还有很多不同的操作(比如混音,添加回声,增加均衡器功能,创建人造立体声效果),所以你还需要一组怎么也写不完的模块来处理这些操作。
在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。
最简单的情况,放一个空的 :file:__init__.py就可以了。当然这个文件中也可以包含一些初始化代码或者为(将在后面介绍的) __all__变量赋值。