python笔记day10-文件操作1

1.容器类数据类型

a.列表:可变,有序

b.元祖:x, y = 12, 100; x, *num = 12, 33, 45, 23; (10,)。 不可变, 有序

c.字典:可变,无序

d.集合:可变,无序; 元素唯一; 支持数学的集合运算

2.函数

a.函数的声明

def 函数名(参数列表):

函数体

b.函数的调用

回到函数声明的位置

传参(使用实参给形参赋值)

执行函数体

确定返回值

回到函数调用的位置

c.参数

位置参数和关键字参数

参数的默认值

不定长参数  - 不带*的参数放在带一个*的前面,带一个*的放在带两个*的前面

def func1(name,*num)

print(name,num)

func1("aa",23,89,890)

参数和返回值类型说明:

def func1(age:int) -> int:

d.返回值

怎么确定函数的返回值  return

函数调用表达式的值就是返回值

调用函数:1)会执行函数体  2)获取返回值

e.匿名函数

lambda 参数列表: 返回值

func2 = lamabda x : x*2

f.作用域

全局变量  global(在函数中声明全局变量)

局部变量  nonlacal (在局部1中的局部声明局部1中的局部变量)

一、生成式

a.迭代器(iter)

容器,可以同时存储多个数据,取的时候只能一个一个的取,并且取过的数据在容器中就不存在了

b.生成器

就是迭代器, 数据是通过调用函数,获取yield后面的值而产生的。数据会在获取的时候去产生

调用一个带yield关键的函数,就是创建一个生成器。

1、什么是生成式

格式1:

(表达式 for 变量 in 序列) -->展开:

def func():

for 变量 in 序列:

yeild 表达式

注意:表达式的结果就是每次循环生成器产生的数据

这的for循环可以控制生成器产生数据的个数,和产生的值

例子:

gen1 = (x for x in range(4))

print(gen1)

print(next(gen1))

print(next(gen1))

print(next(gen1))

print(next(gen1))

gen1 = (x*10 for x in range(4))

print(gen1)

print(next(gen1))

print(next(gen1))

格式2:

(表达式 for 变量 in 序列 if 条件语句)-->展开:

def func1():

for 变量 in 序列:

if 条件语句:

yeild 表达式

例子:

gen3 = (x for x in range(10) if x % 2)

print(next(gen3)) #1

print(next(gen3)) #3

print(next(gen3)) #5

re = list(x for x in range(10) if x % 2 == 0)

print(re)

#交换字典中键值对的:dict1 = {"a":1,"b":2,"c":3} -->{"1":a,"2":b,"3":c}

dict1 = {"a":1,"b":2,"c":3}

dict2 = dict((value, key) for key, value in dict1.items())

print(dict2)

二、模块的使用

1、什么是模块

python中一个py文件就是一个模块

2、怎么关联多个模

方式1:

import 模块名  -  将指定的模块导入到当前的模块中,导入所有的全局变量(模块名就是py文件名)

说明:

a.执行import的时候,实质会进入指定的模块对应的py文件中,去执行里面的代码

b.import导入模块的时候,会检测当前模块之前是否已经导入过,如果已经导入就不再导入

c.通过import去导入一个模块后,可以通过模块.全局变量去使用模块中的内容

例子:

print("===")

import test1

# 使用test1中的变量

a = test1.test1_a

# 调用test1中的函数

print("当前模块:",a)

test1.test1_func1()

方式2:

from 模块名 import 变量/函数名  -  导入模块中指定的变量或者函数

说明:

a.执行到导入模块的语句的时候,还是会执行模块中所有的语句

b.通过from-import导入的时候,导入多次还是会执行一次(查重)

c.使用的时候只能用import后面的变量或者函数,而且用的时候不用在前面加模块名

d.import后面可以使用逗号将多个变量/函数隔开,也可以使用*,将模块中所有的全局变量一起导入

例子:

from test2 import test2_a, test2_func1

# from test2 import *      # 同时倒入test2中所有的全局变量

# from test1 import test1_a

print('当前模块', test2_a)

test2_func1()

# import random

# random.randint(10, 20)

# from random import randint

# randint(10, 20)

函数 - 对功能进行封装      -  获取当前时间对应的代码封装在函数中

模块 - 对多个功能和多个数据进行封装    -  将所有和时间相关的函数或者变量封装到一个py文件中

包 - 对多个模块进行封装    -  将多有和时间相关的py文件放在一个文件夹中

什么是包:含有__init__.py文件的文件夹

3、重命名

import 模块名 as 新模块名

form 模块名 import 变量名 as 新变量名

4、包的导入

import 包名 - 会直接执行包中的__init__.py 文件中的代码

import 包名.模块名 - 导入指定包中的指定模块

from 包名 import 模块名

form 包名.模块名 import 变量名

三、选择性导入

在模块中将不需要其他模块导入和执行的代码写到if __name__ == "__main__"语句中。

这样就可以阻止代码被其他模块执行

原理:每个模块都有一个__name__属性,默认值是模块对应的py文件的名字。

当正在直接执行模块的时候,模块的__name__属性值就会变成'__main__'。

当import模块的时候,执行模块,模块的__name__属性不是'__main__'

例子:

if __name__ == '__main__':

# 写在这儿的代码不会被其他模块执行; 声明在这儿的变量也不会被其他模块导入

print('')

四、文件操作

1、数据本地化

将数据以文件的形式存储到本地磁盘中。

(程序中变量保存的数据都是存到内存当中的,当程序运行结束,内存中的数据全部销毁)

常见数据本地化方式:二进制文件(音频,视频,压缩包等),普通文本文件,json和xml文件,数据库文件等

2、文件操作(读和写)

文件操作的固定步骤:打开文件(新建文件)- 文件操作(读和写)- 关闭文件

3、打开文件

open(file,mode='r',...,endcoding)  返回的是被打开的文件对象(文件句柄)

说明:

file - 字符串;需要打开的文件的路径(可以是绝对路径,也可以是相对路径)

(一般不使用)绝对路径 -

相对路径 - (相对当前的py文件对应的目录)

aaa.txt 或者 ./aaa.txt

./  ---  当前目录(./可以省略)

../  ---  当前目录的上层目录

.../ ---  当前目录的上上层目录

mode - 打开方式;打开文件后不同的操作,对应的打开方式不一样

mode - 打开方式; 打开文件后不同的操作,对应的打开方式不一样

'r'  -  默认值,以读的方式打开文件, 读出来的是字符串

'w'  -  以写的方式打开文件

'rb'/'br' - 以读的方式打开,读出来的数据是二进制

'wb'/'bw' - 以写的方式打开,写二进制数据到文件中

'a' - 以写的方式打开,追加

'+' - 以读写方式打开

encoding - 文本文件编码方式,一般赋值为'utf-8'

utf-8 - 支持中文编码

gbk - 不支持中文编码

以读的形式打开一个文本文件,保存到变量f中。对f进行操作,就是对被打开的文件进行操作

f = open('files/蓝莲花.txt', 'r', encoding='utf-8')

4、文件的读操作

文件对象.read() - 从文件读写位置开始读到文件结尾(默认就是获取文件中所有的内容)

文件对象.readline() - 读一行

练习:将文件中的内容读完,要求一行一行读

content = f.readline()

while content:

print(content)

content = f.readline()

5、文件的写操作

文件对象.write(字符串)  -  将字符串中的内容写进去文件中(会完全覆盖原文件中的内容)

'w' - 完全覆盖

'a' - 在原文件的最后添加

6.关闭文件

文件对象.close() - 关闭指定的文件

五、二进制文件的读写操作

1、open方法的另外一种写法:

whith open(文件路径,读写方式,encoding=编码方式) as 文件对象:

操作文件

--> 打开文件,将文件存在文件对象中。当文件操作完成会自动关闭

普通的文本文件也可以以二进制的形式读和写

2、二进制文件的读写

只要将读写方式设置为 'rb'/'br'就可以了。读出来的数据直接就是二进制数据

注意:二进制操作不能设置编码方式

# 二进制文件的读

with open('files/蓝莲花.txt', 'rb') as f:

content = f.read()

print(content, type(content))

with open('files/luffy4.jpg', 'rb') as f:

content = f.read()

print(content)

二进制写

with open('imge.jpg', 'wb') as f:

f.write(content)

图片下载

# response = requests.get('https://wx4.sinaimg.cn/mw690/4674e705ly1fck5nxjt74j20yi1pc7mb.jpg')

# with open('下载.jpg', 'wb') as ff:

#    ff.write(response.content)

3.文件不存在

当以读的方式打开一个不存在的文件,会报'FileNotFindError'

当以写的方式打开一个不存在的文件,不会报错,并且会创建这个文件

# with open('bbb.txt', 'r') as f:

#    print(f.read())

with open('ddd.txt', 'bw') as f:

# print(f.write())

pass

六、文件操作的应用

指导思想:

1.使用数据的时候去本地文件中取数据

2.数据修改后,将新的数据更新到本地文件中

写一个程序统计当前程序执行的次数。第一次运行程序打印1,第二次运行的时候打印2,以此类推

with open('files/count',encoding="utf-8") as  f:

count = int(f.read())

print(count)

print("第%d次数进入程序"%count)

count += 1

with open('files/count',"w",encoding="utf-8") as  f:

f.write(str(count))

print("第%d次数进入程序" % count

你可能感兴趣的:(python笔记day10-文件操作1)