文件的写入

wirte 写入   

flush 将在内存缓冲区的内容写入到磁盘中

‘w’:覆盖写入,在打开这个文件的时候会把原文件内容全部删除,之后写入新的内容,如果没有这个文件就新创建一个新的文件

写入的内容只能是字符串

如果写入的内容需要换行,需要自己提供换行符

缓冲区写入到硬盘的动作:

1.缓冲区满了,会向磁盘写入,腾出缓冲空间

2.程序调用了flush函数

3.程序关闭或者调用了close()函数

# 文件写入

f=open('test_write.txt','w',encoding='utf-8')

f.write('1111\n')
# f.flush()

f=open('test_write.txt','w',encoding='utf-8')

f.write('1111\n')
f.write('111121\n')
f.write('111121231231\n')
f.flush()
# 练习
"""
生成一万条数据
我的id是1
我的id是2
我的id是3
我的id是4
.。。。

"""
f=open('data.txt','w',encoding='utf-8')

for i in range(1,10001):
    f.write(f'我的id是{i}\n')

1
f.close()

文件的追加

在文件的原有基础上进行追加,不存在则创建

这个代码是将一个内容经过筛选复制到另一个文件中的动作

f = open('bill.txt', 'r', encoding='utf-8')


f2 = open('bill.txt.abk', 'w', encoding='utf-8')


for line in f.readlines():
    line= line.strip()
    line_1=line.split(',')
    if line_1[4]=='测试':
        continue
    else:
        f2.write(line+'\n')

f.close()
f2.close()

二级制内容的写入和追加

读取:rb

写入:wb

追加:ab

其中的r,w,a是原本读,写 ,追加的内容后面的b对应这二进制

二级制用来处理音频和视频文件

异常

代码在运算中可能遇到的报错情况,如果遇到了这个情况的后续处理方式

格式:

 try:

     可能发生错误的代码

except:

     如果出现了异常怎么处理

在excerpt后跟指定的内容,就是只处理这种情况的异常,异常处理可以使用别名

def div(a,b):
    try:
        return a/b
    except ZeroDivisionError as e:
        print(f"出错了:::{e}")

    except TypeError as e:
        print(f'出错了:::{e}')


div(10,'abc')
div(10,0)
div(10,1)

捕获所有异常:

try:

    代码块

except Exceptions as e:

会捕获所有的异常

# 所有异常
def div(a,b):
    try:
        return a/b
    except Exception as e:
        print(f"出异常了看看传入参数是什么::{e}")


div(10,'abc')
div(10,0)
div(10,1)

后续可以添加

else:

     内容

表示如果没有异常就返回的内容

Finally:

   内容

无论有无异常都要执行的代码

def div(a,b):
    result=None
    try:
        result=a/b
    except Exception as e:
        print(f"出异常了看看传入参数是什么::{e}")
    else:
        print('没有异常')

    finally:
        print("都执行")
    return result


print(div(10, 1))
print('-'*40)
print(div(10, 0))

#### 

结果:

没有异常
都执行
10.0
----------------------------------------
出异常了看看传入参数是什么::division by zero
都执行
None

注意:异常具有传递性,可以通过报错信息来查看传递链

python模块

以.py结尾的python文件。作用:把代码写在别的文件中,方便主程序进行调用

常见的引用方式:

import 模块名(文件名)

from 模块名 import 函数,变量等

from 模块名 import *   ---->会引用全部的代码和变量

import 模块名 as 别名

from 模块名 import 函数名 as 别名

# import 模块
import tetx


a=11
b=22
c=33
f=tetx.add(a,b,c)
print(f)

f1=tetx.find_min(a,b,c)
print(f1)

f2=tetx.find_max(a,b,c)
print(f2)

# 其余导入方法

# from 模块名 import 类,变量,方法等
from time import sleep
from random import randint

print(1)
sleep(2)
print(2)
a = randint(1, 10)
print(a)

# from 模块名 import*
from tetx import *

f = add(1, 2, 3)
print(f)

f2 = find_min(2, 3, 66)
print(f2)


# # import 模块名 as 别名
# # from 模块名 import 方法名 as 别名

import random as suiji
from tetx import add as jia

a=suiji.randint(1,10)
b=suiji.randint(1,10)
f=jia(1,2,2)
print(a)
print(b)
print(f)

text.py:

__all__ = ["add", 'find_min']


def add(a, b, c):
    return a + b + c


def find_max(a, b, c):
    return max(a, b, c)


def find_min(a, b, c):
    return min(a, b, c)


print("帅帅嘟")

模块如果同名了:如果导入的功能模块同名了,那么程序使用的就是最后一个模块

通过:__all__:来控制from 模块名 import*使用的是哪些函数

那么在每个模块都有对应的测试代码,程序调用这些测试代码的时候就会把测试使用的变量一并带过来,如何避免这种问题:

这些测试的内容写在  if __name__==__main__:中

其中:__name__是当前操作的模块名称,模块直接运行,他的名字就是__main__

如果模块是调用运行的,那么模块的名称就是他文件的名称,那么就不会运行下面的代码

python包

每个包含__init__这个文件名称的文件,就可以当作是一个包

作用:当模块越来越多不好管理的时候,包可以帮助我们管理这些文件,包的本质依据是模块

包就是模块的集合,模块就是函数的集合

"""
用包里面的模块里面的函数
import 包名.模块名
包名.模块名.目标

"""
# 方法一
import my_package.my_module1

my_package.my_module1.my_print1()

# 方法二 from 包 import *  需要在init中写入 __all__=[函数名],表示哪些可以被使用
from my_package import *

my_module1.my_print1()

# 方法三  from 包.模块 import 功能 [ as 别名]

from my_package.my_module1 import my_print1 as p
from my_package.modeule2 import my_print2 as s

p()
s()

第三方包的下载:

pip install 包名 -i 镜像地址

更多推荐