前言回顾
import json
1.生成式
结构1:
(表达式 for 变量 in 序列)
def func():
for 变量 in 序列:
yield 表达式
结构2:
(表达式 for 变量 in 序列 if 条件语句)
def func():
for 变量 in 序列:
if 条件语句:
yield 表达式
2.文件操作
- 打开文件 -> 2) 操作文件(读/写) -> 3) 关闭文件
(1) open(文件地址, 读写方式, encoding='utf-8') (读写方式默认值为 'r')
./ -- 当前目录
../ -- 当前目录的父级目录
'r' - 只读,读到的内容是字符串,文件地址不存在会报错
'w' - 只写,写文本,会清空原文件,文件地址不存在不会报错且会创建新文件
但是'w'可以创建新文件,不能创建文件夹,即必须在指定文件夹中创建文件
'br'/'rb' - 只读,读到的内容是bytes,文件地址不会报错
'wb'/'bw' - 只写,写二进制,清空文件,文件地址不存在不会报错会创建新文件(不会创建文件夹)
'a' - 只写,写文本,不会清空文件,而是在文件的最后添加内容。文件地址不存在不会报错会创建新文件(不会创建文件夹)
(2) read()/write()
(3) close() - 文件关闭后不能操作
with open() as 文件对象:
文件操作
3.json数据
什么数据是json数据: a:有且只有一个数据 b.这个数据必须是json支持的数据
数字 - 19, 239.4, 3e3 (int,float,科学计数)
字符串 - "abc", "\tabc", "\u4e00"
布尔 - true/false
数组 - [12, "abc", true]
字典 - {"name": "小明", "age": 18, "gender":true}
nulljson转python
json.loads(字符串, encoding='utf-8')
json.load(文件对象) - 将指定文件中的json数据转换成python数据python转json
json.dumps(python数据)
json.dump() - 将python数据装换成json数据,
list1 = json.loads('[12, "abc", true]', encoding='utf-8')
print(list1)
array_list = json.dumps({'name': '张三', 12: 200, 'gender': True})
print(array_list)
with open('a.txt', 'r', encoding='utf-8') as f:
# result = json.load(f)
result = json.loads(f.read())
print(type(result), result)
with open('a.txt', 'w', encoding='utf-8') as f:
data = json.dump([1, 'abc', True])
1.什么是模块
python中的一个py文件就是一个模块
模块能被其他模块使用的有:全局变量
2.导入模块
- import 模块名 - 在当前模块中导入指定模块,导入可以使用指定模块中的所有声明过的全局变量
通过'模块名.变量名'
导入模块一般写在最上面
import 模块名 as 新模块名 - 对导入的模块进行重命名
- from 模块名 import 变量1,变量2,... - 在当前模块中导入指定模块,只能使用import后面指定的变量
通过'变量'
from 模块名 import 变量1 as 新变量名1,变量2 as 新变量,变量3...
# =====1) import直接导入=====
import test1
print(test1.num)
test1.num = 200
print(test1.num)
print(test1.a)
test1.test_func1()
test1.test_func2('你好')
# =====2) from导入=====
from test1 import num, a, test_func2
print(num)
print(a)
print(test_func2(10))
print(test1.a) # NameError: name 'test1' is not defined
# =====2) 重命名=====
# 模块重命名
import test1 as T1
print(T1.num)
# 变量重命名
# from test1 import num as test1_num,
3.导入模块的原理
- 通过import或者from-import导入模块,本质就是去执行模块中的代码
- 怎么阻止导入:将需要阻止的代码直接或者间接放在if-main语句中
if __name__ == '__main__':
需要阻止导入的代码块
- 阻止导入的原理(了解)
每个模块都有'name'属性,这个属性的默认值是模块的名字。
当我们直接执行模块(在文件里面run)的时候,这个模块的name的值就会自动变成main
(即当前执行的文件的名字为main, 输出name显示main)
import test1
# from test1 import num
print('module的名字:', __name__)
print('+++++')
import math