Python学习笔记|文件操作,异常,模块包,数据可视化,面向对象入门
一、文件操作
计算机只识别二进制,编码就是文本和二进制转换的规则,常见编码: UTF‑8 、 GBK 、 Big5 。
文件分为文本、视频、音频、图片、可执行文件等。
python中对文件操作:打开、读、写、关闭。
- open()打开文件
f = open(name, mode, encoding="UTF-8")
name:文件名/文件路径字符串
mode:打开模式(r,w,a)
encoding :编码格式,必须用关键字参数指定,常用 encoding="UTF-8"
r :只读
w :写入,文件存在直接清空旧内容;不存在则新建
a :追加,不会清空原有内容
open返回的是文件对象,不是文本内容,要调用读取方法拿到文本。
- 文件读取方法
f.read(num) # num为读取字符长度;不传num读取全部,返回字符串。
f.readline() # 读取一行,返回字符串。
f.readlines() # 读取全部行,返回每行组成的列表。
for line in f: # for循环遍历文件对象,逐行读取。
注意:文件内部存在读取指针,读完一部分后,后续读取从指针当前位置继续往后读。
- 关闭文件
f.close()
如果文件不关闭,就无法删除、重命名该文件。
自动关闭写法: with open() as f ,代码块结束自动关闭文件,不用手动 close() 。
- 文件写入
f.write("hello world")
f.flush()
注意:
1.内容先写到内存缓冲区, flush() 才真正刷入硬盘。
2.close() 内部会自动调用 flush() 。
3.w 模式:打开瞬间清空原有内容;多次调用 write() 只会往缓冲区追加,不会重复清空。
- 文件追加:a模式
把mode改为a,文件存在就向后追加,不会清空旧内容。
注意:换行需要手动加 \n 。
综合小案例:过滤账单,备份文件
fr = open("bill.txt","r",encoding="UTF-8")
fw = open("bill.txt.back","w",encoding="UTF-8")
for line in fr:
if line.strip().split(",")[-1]=="测试":
continue
fw.write(line)
fw.close()
fr.close()
二、异常处理
程序运行时出现的错误就是异常(BUG),可以捕获异常避免程序直接崩溃。
- 基础语法
try:
# 可能出错的代码
except:
# 出现异常执行这里
- 捕获指定异常:
try:
print(name)
except NameError as e:
print("变量未定义异常")
print(e) #打印异常详情
- 捕获多个异常:
把多个异常类型放到元组里。
- 捕获全部异常:
try:
print(name)
except Exception as e:
print("出现异常")
关于else 和 finally:
else :没有发生异常的时候执行。
finally :无论是否异常,一定会执行。
try:
pass
except Exception as e:
pass
else:
#无异常执行
pass
finally:
#无论怎样都执行
pass
注意:异常具备传递性,会由底层向上层传递。
三、模块
模块就是一个Python文件,里面存放函数、类、变量,可以导入复用。
导入方式:
1. import 模块名 ,使用: 模块名.功能()
2. from 模块名 import 功能名 ,直接写功能名调用,不需要 .
3. from 模块名 import * ,导入模块全部功能
4. 可以给模块/功能起别名
导入语句习惯写在代码文件最开头。
自定义模块:
新建 .py 文件,文件名就是模块名,文件名必须符合标识符命名规则。
不同模块如果有同名函数,后导入的会覆盖先导入的。
if __name__ == '__main__'
模块内部写测试代码时使用:
def test(a,b):
pass
if __name__ == '__main__':
# 只有直接运行本文件才执行;被import导入时不会执行
test(1,2)
关于__all__ :
写在模块内,控制 from xxx import * 能导入哪些功能:
__all__ = ["func1","func2"]
只有列表内写的函数, import * 才可以使用;不写 all 默认全部导出。
四、Python包
包是包含 init.py 文件的文件夹,用来管理多个模块;没有这个文件只是普通文件夹。
Pycharm新建:右键 → New → Python Package。
包导入:
import 包名.模块名
#调用:包名.模块名.函数()
from 包名 import 模块名
#调用:模块名.函数()
注意:all 写在包的 init.py 中,控制 import * 导入的内容。
第三方包安装:
使用 pip 安装第三方包;下载慢可以配置清华镜像源:
-i https://pypi.tuna.tsinghua.edu.cn/simple
五、JSON数据
JSON是不同编程语言之间的数据交换格式,本质是特殊格式的字符串,格式长得像Python字典/列表。
json字符串只支持双引号。
import json
# Python对象 → json字符串 dumps
json_str = json.dumps(data, ensure_ascii=False)
# ensure_ascii=False:支持正常输出中文
# json字符串 → Python对象 loads
data = json.loads(json_str)
六、pyecharts数据可视化
pyecharts用来快速生成各类图表,官网画廊可以直接复制示例代码。
1.折线图Line
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts
line = Line()
line.add_xaxis(["yin","xin","le"])
line.add_yaxis("age",[27,16,14])
#全局配置
line.set_global_opts(
title_opts=TitleOpts(title="yorozuya",pos_left="center",pos_bottom="1%"),
legend_opts=LegendOpts(is_show=True),
toolbox_opts=ToolboxOpts(is_show=True)
)
line.render() #生成html文件
2.地图Map
from pyecharts.charts import Map
map = Map()
data = [("北京市",99),("上海市",199),("浙江省",299),("湖南省",399)]
map.add("测试地图", data, "china")
map.render()
注意:要写完整省、市名称。
3.时间线 Timeline:
用于动态柱状图,把多个图表加入时间线,支持自动播放、切换主题。
排序:sort与sorted
列表.sort(key=函数,reverse=布尔) :直接修改原列表, reverse=True 降序, False 升序
sorted(可迭代对象,key=函数) :返回新列表,不改动原数据
可用lambda匿名函数:
lst = [["gin",27],["xin",16],["la",14]]
lst.sort(key=lambda element:element[1],reverse=False)
七、面向对象入门
面向对象三步骤:
1. 使用 class 设计类
2. 根据类创建对象
3. 给对象的属性赋值

浙公网安备 33010602011771号