python中open()函数的使用(对文件的操作),异常和常见的异常处理,模块和包

目录

一.读写文件,对文件的操作(open()函数)

1.写一个文本文件text:内容为  “你好,python”,读取文件内容。复制这个文件,拷贝为text2.

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

3.给定一个列表:['string1', 'string2', 'string3']将列表内容写入文件,每一个元素一行.

二.异常以及常见的异常处理

三.模块和包


一.读写文件,对文件的操作(open()函数)

使用open()函数对文件进行操作必须有相应的close操作.

Python中支持文件操作的函数

open()

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):

参数:最常使用的是两个位置参数和一个关键字参数file,mode, encoding

file: test.txt

绝对路径:从根目录开始的路径,一个完整的路径

相对路径:

 .: 当前目录

 ..代表上一级目录

mode: 代表操作文件的方式

     Character Meaning                 #默认格式为文本只读

    'r'       open for reading (default)             

    'w'       open for writing, truncating the file first

    'x'       create a new file and open it for writing

    'a'       open for writing, appending to the end of the file if it exists

    'b'       binary mode                  #针对二进制或者字节

    't'       text mode (default)

    '+'       open a disk file for updating (reading and writing)

    'U'       universal newline mode (deprecated)

buffering: 缓冲,都是整数

              0, 代表不缓冲,关闭

              1,代表文本模式下,缓冲一行

              >1: 针对我们的二进制

encoding: 编码方式

error: 错误

newline: 新行

closefd: 关闭文件描述符

返回值:

返回一个 file object

一般我们最常用的四个参数:*file, *mode, *encoding, bufferring

1.写一个文本文件text:内容为“你好,python”读取文件内容。复制这个文件拷贝为text2.

1.1  以手动关闭文件的方式操作

str_data = "你好,python"      
data1 = open('text', 'wt', encoding='UTF-8')     #以写的方式打开并创建一个text文件
result1 = data1.write(str_data)
data1.close()
data2 = open('text', 'rt', encoding='UTF-8')      #以读的方式打开text文件
result2 = data2.read()
data2.close()
data3 = open('text2', 'wt', encoding='UTF-8')     #将读的text文件的内容写入text2文件中
result3 = data3.write(result2)
data3.close()

1.2  以自动关闭文件的方式操作

使用  with open("1.txt", "wb") as file_obj: 

可以保证在写入数据时保证不丢失,保证了数据的完整性。

str_data = "你好,python"
with open('text', 'wt', encoding='UTF-8') as file_obj1:
    file_obj1.write(str_data)
with open('text', 'rt', encoding='UTF-8') as file_obj2:
    result= file_obj2.read()
with open('text2', 'wt', encoding='UTF-8') as file_obj3:
    file_obj3.write(result)

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

      #在这里我们使用手动关闭文件的方式操作
      注意照片需要使用对二进制或字节的操作

data = open('1.jpg.jpeg', 'rb')
result = data.read()
print(result)
data.close()
data2 = open('copy.jpg', 'wb')
result2 = data2.write(result)
data2.close()

3.给定一个列表:['string1', 'string2', 'string3']将列表内容写入文件,每一个元素一行.

在这里我们想把列表中的字符串写进text文件中(每行一个元素),我们需要使用字符串中的join操作,将‘\n’插入到列表每个元素的中间,来达到换行 打印的目的.

list_data = ['string1', 'string2', 'string3']
data = '\n'.join(list_data)
with open('text3', 'wt', newline='') as file_obj:
    file_obj.writelines(data)


##text3文件中为:
string1
string2
string3

二.异常以及常见的异常处理

1.异常的完整语法:

try:

    要执行的语句                                  #python解释器抛出异常(或者正常语句)

except:

    异常处理的语句                              #根据try中的语句去捕获异常

except:

    异常处理的语句N

else:                                                   #当try中的语句正常执行时,执行else中的语句

    try中的语句正常执行,要执行操作

finally:                                                 #无论try中的语句是否有异常都需要执行的语句

    始终都要的做的语句

2. 常见的异常处理(try中的异常只能被捕获到一次)

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

3.用异常处理来进行读写文件的关闭

try:
    file_obj = open("1.txt", "w")
    file_obj.write("123")
    1 / 0
except:
    print("处理异常")
finally:
    file_obj.close()
    print("Finally")

#执行结果
处理异常
Finally

进程已结束,退出代码0

 4.我们可以自动抛出异常.

使用raise可以强制抛出一个异常,当try中语句可以正常执行时,我们可以使用raise强制抛出一个我们想要处理的异常类型,然后在except中捕获去处理异常。

try:
    1
    raise IndexError
except IndexError:
    print("Handle Index Error")

#执行结果
Handle Index Error

进程已结束,退出代码0

三.模块和包

1.模块的概念

退出 Python 解释器后,再次进入时,之前在 Python 解释器中定义的函数和变量就丢失了。因此,编写较长程序时,建议用文本编辑器代替解释器,执行文件中的输入内容,这就是编写脚本。随着程序越来越长,为了方便维护,最好把脚本拆分成多个文件。编写脚本还有一个好处,不同程序调用同一个函数时,不用每次把函数复制到各个程序。

为实现这些需求,Python 把各种定义存入一个文件,在脚本或解释器的交互式实例中使用。这个文件就是 模块 ;模块中的定义可以 导入 到其他模块或  模块(在顶层和计算器模式下,执行脚本中可访问的变量集)。

模块是包含 Python 定义和语句的文件。其文件名是模块名加后缀名 .py 。在模块内部,通过全局变量 __name__ 可以获取模块名(即字符串)。

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.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

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

包是一种用“点式模块名”构造 Python 模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。

假设要为统一处理声音文件与声音数据设计一个模块集(“包”)。声音文件的格式很多(通常以扩展名来识别,例如:.wav, .aiff, .au),因此,为了不同文件格式之间的转换,需要创建和维护一个不断增长的模块集合。为了实现对声音数据的不同处理(例如,混声、添加回声、均衡器功能、创造人工立体声效果),还要编写无穷无尽的模块流。下面这个分级文件树展示了这个包的架构:

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

包和目录的区别:目录在pycharm中就是一个文件夹,用来放置资源文件。

对于包而言,与目录不同之处就是包会自动创建一个__init__.py文件。 包中包含一个模块和一个__init__.py文件。

Python 只把含 __init__.py 文件的目录当成包。这样可以防止以 string 等通用名称命名的目录,无意中屏蔽出现在后方模块搜索路径中的有效模块。 最简情况下,__init__.py 只是一个空文件,但该文件也可以执行包的初始化代码,或设置 __all__ 变量,

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shadow_58

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

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

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

打赏作者

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

抵扣说明:

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

余额充值