python(异常,文件操作)

异常
D:\pr\python\venv\Scripts\python.exe D:/pr/python/11.py
Traceback (most recent call last):
File “D:/pr/python/11.py”, line 1, in
1/0
# file(‘那个模块’,那一行。)
ZeroDivisionError: division by zero #代码错误提醒

种类
处理异常

try:
    1/0
except ZeroDivisionError as  mingzhi:
    print('除法除数有问题,请修改') #重定向

与else结合

try:
    1/0
except ZeroDivisionError as  mingzhi:
    print('除法除数有问题,请修改') #重定向
    print(mingzhi )
else:
    print('else')

try - except语法规则

try:
		# 可能出现异常代码

	except:
		# 如果说出现了异常,则代码立刻就进入except

	finally:
		必须要执行的代码(finally关键字:最后、最终的意思必须要执行的代码)
例:

```clike
try:

    x=2
    x+=10
except Exception as e :
    print("程序有问题")
finally:
    print("不管你怎么写,我的优先级很高")
    x+=20
print(x)

在这里插入图片描述
(注意:若return关键字在 finally前面,finally改变不了return。return照常输出。面试题)
例:

def addition():
    try:
        x=1
        return x
    except Exception as e:
        print("有问题")
    finally:
        print("优先级高,但改变不了return")
        x+=10#改变不了returnreturn x
if __name__ == '__main__':

    print(addition())

在这里插入图片描述

异常处理

def func_with_l():
    try:
        l=[1,2,3]
        #如果程序出现错误,错误出现后,后面程序将不会被执行。
        l[3]#溢出
        1/0#语法错误,0不能为除数
        #多个except时,谁第一个找到问题,就输出谁,找不到就跳过。
    except Exception as w :#Exception所以异常的总和
        print('+'*10)
   # except ZeroDivisionError as e:
       # print('+'*20)
    #except IndexError as ex:
       # print(2*2)
if __name__=='__main__':
     func_with_l()

O流
1、什么叫做IO流

IO Stream(input output stream):
	狭义上:内存和永久存储设备之间数据流动
	广义上:内存和(其他电脑|其他存储设备)间数据的交互

2、python是如何操作IO
open函数

open函数返回的是文件对象(File)
'buffer', 'close', 'closed', 'detach', 'encoding', 'errors',
'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 
'newlines', 'read', 'readable', 'readline', 'readlines', 
'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 
'writable', 'write', 'write_through', 'writelines']	

IO流的分类
按照数据的流动方向:
|-- 输入流 input
|-- 输出流 output
安装数据的类型:
|-- 字节流 Bytes IO
|-- 字符流 String IO

字符流:数据类型是字符串 t==text

字节流:
打开open,模式需要定义 b == binary 二进制

pass关键字的使用

from io import BytesIO
from io import StringIO

对象序列化
什么叫做序列化(Serialization):
面向对象的对象这些本质是逻辑概念—>物理概念

要么将对象序列化为字节数据,要么序列化字符串(json)

pickle
dump
load

dumps
loads
	#官方提供的对象序列化的内置模块
import json#
import pickle
ls=[1,2,3,4,5,6,7,8]
pickle.dump(ls,open("路径或文件",mode="wb"))#持久化数据,将ls放在路径下
pickle.load(open("文件",mode="br"))#反序列化读取数据
a=pickle.dumps(ls)#返回序列化字节
print(pickle.loads(a))#序列化到处
#json方法和pickle方法一样
json.dumps(ls,open("路径",mode="wt"))#将ls放在路径下字符串保存
json.loads(open("路径",mode="r"))

python文件操作

import queue as q#文件导入

定义查找文件
import os.path as q#文件导入

#文件读写
#打开一个文件

try:
    file_path=input('请输入路径')
    if q .exists (file_path ):
     f=open(file=file_path )#打开并返回文件句柄
    print( file_path  )#非字节精确读数
    print(f.readlines()=='' )#超过边界返回字符串,空字符
except IOError as e:
  raise e
finally:
    f .close()  #函数的释放

方法二

with open(file= 'e : 路径' ) as f :
    print(f.readlines() )

文件进行修改(内容会被清空)

with open(file= 'e:/readme.txt ',mode= 'w' ) as f :
    f.write('whrist')

文件内容增加(不改变里面内容)

with open(file= 'e:/readme.txt ',mode= 'a' ) as f :
    f.write('whrist')

查看文件句柄偏移量位置(seek,tell)

import os.path as q#文件导入
#文件读写
#打开一个文件

with open(file= 'e:/readme.txt ',mode= 'w+' ) as f :
    f.write('我喜欢你')
    #f.seek(0)#强制读文件从某一个位置开始
    print(f.tell() )#偏移量位置,字符为单位
    print(f.readlines() )

其他用法
import os.path as q#文件导入
with open(file= 'e:/readme.txt ',mode= 'ab+' ) as f :
    f.write('I love you'.encode() )
    f.seek(0)#强制读文件从某一个位置开始
    print(f.tell() )#偏移量位置,字符为单位
    print(f.readlines() )

查看模块路径

import os #文件导入

print(os.path)#查看当前工作路径

import os #文件导入
print(os.getcwd() )#查看当前工作区

import os #文件导入
print(os. getcwd() )#查看当前工作区
os.chdir('路径') #改变工作目录
print(os. getcwd() )

删除目录

import os 
os. remove('目录')  #删除一个目录

修改名字

import os
os. remove('目录名字,名字')   #修改一个目录名字

创建目录

import os
os.chdir('e:/') #工作目录
os. mkdir('文件名')    #创建一个目录名字,当前工作区下创建

创建一个文件import os

os.chdir('e:/') #工作目录
os.makedirs('文件名')     #创建一个文件名字,当前工作区下创建

import os
import os.path as op

os.chdir('e:/') #工作目录
os.makedirs('文件名')     #创建一个目录名字,当前工作区下创建
print(op.isdir()) ##判断是否为目录
print(type (op.basename()) )# 获取路径或目录的直接名称,不要文件名和目录名
op.abspath() #
op.dirname() #获取路径或目录的直接名称,要文件名目录名
op.getatime() #

编程实验(计算文件大小)

1,明确自己的需求(自己要干什么)

#查找目录下目录。文件和文件大小,递归查看
import os
import os.path as op
dir_total_size=0#计算目录个数
file_total_size=0#计算在文件总大小
def guanzhe(root):
    '''
    rooot:给的目录,查看目录下所以子目录和文件
    '''
    global dir_total_size
    for child in os.listdir():
        item=op.join(root,child)
        if op.isdir(child) :
            global dir_total_size
            dir_total_size +=1
            guanzhe(item )
        else:
           global file_total_size
           file_total_size +=op.getsize(child)
def  showMess():
    print('dir_total_size=%d'%dir_total_size )
if __name__=='__main__':
    guanzhe(input('请输入目录') )
    showMess( )

猜你喜欢

转载自blog.csdn.net/weixin_47514459/article/details/109604045