Python中读写文件、异常和异常处理、模块和包

目录

1.读写文件

1.1 写一个文本文件text:内容为西安培华学院,读取文本文件的内容,复制这个文件text,拷贝为text2

1.2 找一张图片,复制这个图片到copy.jpg

1.3 给定一个列表["string1", "string2", "string3"],将列表内容写入文件,每一个元素一行

2. 异常

2.1 异常的完整格式,以及每个部分的意思

try/except

try/except...else

try-finally 语句

2.2 常遇见的>=5种异常的处理

2.3 以及用异常处理来进行读写文件的文件关闭

2.4 如何主动抛出异常

3.模块和包

3.1 什么叫模块?

3.2 如何导入模块,如何导入模块中的具体内容

3.3 import语句的实质是什么?

3.4 什么是包,包和目录的区别,__init__.py的作用


1.读写文件

文件基本操作:open、close、read、write

文件指针 标记 从哪个位置开始读取数据

第一次打开 文件时,通常 文件指针会指向文件的开始位置

当执行了read方法后,文件指针会移动到读取内容的末尾

默认情况下会移动到 文件末尾

1.1 写一个文本文件text:内容为西安培华学院,读取文本文件的内容,复制这个文件text,拷贝为text2

"""
  写一个文本文件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

"""
找一张图片,复制这个图片到copy.jpg
在这里我们使用手动关闭文件的方式操作,注意照片需要使用对二进制或字节的操作
"""
data = open('影哨.jpg', 'rb')
result = data.read()
data.close()
data2 = open('copy.jpg', 'wb')
result2 = data2.write(result)
data2.close()

1.3 给定一个列表["string1", "string2", "string3"],将列表内容写入文件,每一个元素一行

"""
给定一个列表["string1", "string2", "string3"]
将列表内容写入文件,每一个元素一行
"""
list_data = ["string1", "string2", "string3"]
data = '\n'.join(list_data)
with open('text3', 'wt', newline='') as file_obj:
    file_obj.writelines(data)

2. 异常

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

2.1 异常的完整格式,以及每个部分的意思

try/except

异常捕捉可以使用 try/except 语句。

try/except...else

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。

else 子句将在 try 子句没有发生任何异常的时候执行。

try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。

Python 使用 raise 语句抛出一个指定的异常。

raise语法格式如下:

raise [Exception [, args [, traceback]]]

2.2 常遇见的>=5种异常的处理

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
 
进程已结束,退出代码0

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 * (一般情况不推荐使用)

*: 所有, 但是还是有限制

导入所有不以下划线(_)开头的名称

import sys
sys.audit()

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__变量赋值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Golang_HZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值