python_day4

文件

文件编码

思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?

使用编码技术(密码本)将内容翻译成0和1存入

编码技术:即记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别的内容:

例如:UTF-8,GBK这种

1.0 文件的读取

内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理和检索,引入了"文件"的概念

对文件的操作:

1、打开文件

2、读写文件

3、关闭文件

打开文件

open()打开函数

open(name,mode,encoding)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)

mode:设置打开文件的模式(访问模式):只读、写入、追加

encoding:编码格式(推荐使用UTF-8)

f = open("hello.txt",'r',encoding="UTF-8")
#encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
模式:
r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w:打开一个文件只用于写入。如果该文件已存入则打开文件,并从头开始编辑。原有内容会被删除
a:打开一个文件用于追加。如果该文件已存在,新的内容将被写入到已有内容之后。如果该文件不存在,则创建文件进行写入

读操作相关的方法

read()方法:
文件对象.read(num)
#num 表示要从文件中堆区的数据的长度(单位是字节),如果没有传入num,那么表示读取文件中所有的数据

readlines()方法:
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回一个列表,且每一行数据为一个元素
f = open('python.txt')
content = f.readlines()

print(content)

#关闭文件
f.close()
一次读取一行的方法
line1 = f.readline()
line2 = f.readline()

一次读取一行

循环读取

for line in open("python.txt","r"):
	print(line)
    #每一个line临时变量,就记录了文件的一行数据

文件的关闭操作:

time.sleep(50000) # 让程序暂停执行

f.close()

文件的关闭

f.close()

with open("python.txt","r",encoding = "UTF-8") as f:
	f.readlines()
#通过在with open 的语句块中对文件进行操作
#可以在操作完成后自动关闭close文件,避免遗忘掉close方法

img

要是打开文件后,没有用f.close()关闭文件,文件就会一直被占用

#查找一个文本内容某个单词出现的次数
for line in f:
    	line = line.strip() #去除开头和结尾的空格以及换行符
       	words = line.split(" ")
        print(words)

写文件操作:

# 1、打开文件
f = open('python.txt','w',encodint = "UTF-8")
# 2、文件写入
f.write('hello world')
# 3、内容刷新
f.flush()

直接调用write,内容并未真正写入文件,而是会积攒到程序的内存中,称之为缓冲区

当调用flush的时候,内容会真正写入文件

这样做是避免频繁的操作硬盘,导致效率低下

注意:"w":文件存在时,它会把内容清空,写我们想写的东西

追加写入快速操作

#1、打开文件,通过a模式打开即可
f = open('python.txt','a',encoding = 'UTF-8')
# 2、文件写入
f.write("hello world")
#3、内容刷新
f.flush()

用a模式时,如果不存在文件:会创建文件

如果文件已经存在,则会追加写入

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段

try:
	可能发生错误的代码
except:
	如果出现异常执行的代码

例如:

快速入门:

try:
	f=open("linux.txt",'r')
except:
	f=open("linux.txt",'w')

捕获异常;

try:
	print(name)
except NameError as e:
	print('name变量名称未定义错误')
    print(e)

如果尝试执行的代码的异常类型和想要异常捕获的类型不一致,则无法捕获异常

  • 一般try下方只放一行尝试执行的代码。
捕获多个异常
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写
try:
	print(1/0)
except (NameError,ZeroDivisionError) as e:
	print('ZeroDivision错误...')
	print(e)

捕获全部异常

try:

except Exception as e:

异常的else

else表示的是如果没有异常要执行的代码

try:
	print(1)
except Exception as e:
	print(e)
else:
	print('我是else,没有异常的时候执行的代码')

异常的finally

finally表示的是无论是否异常都要执行的代码,例如关闭文件

try:
	f=open("test.py",'r')
except Exception as e:
	f = open("test.txt",'w')
else:
	print("无异常")
finally:
	f.close()
	

异常的传递性:当函数1没有捕获异常,这个异常就会传递到下面的函数,直到main函数捕获这个异常,这就是异常的传递性。

当所有函数都没有捕获异常的时候,程序就会报错

模块

Python 模块(Module),是一个Python文件,以.py结尾。模块能定义函数,类和变量,模块里也能包含可执行的代码

模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我们实现一些功能,可以人为一个模块就是一个工具包
模块就是一个python文件,里面有类、函数、变量等,我们可以拿过来用

模块的导入方式:
[from 模块名] import [模块|类|变量|函数|*] [as 别名]
常用的组合形式:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名

import 模块名

import 模块名
import 模块名1,模块名2

模块名.功能名()

例如:
import time 
time.sleep(5) # 程序等待5ms
新建一个Python文件,命名为my_module.py,并定义test函数
然后在别的软件里面
import my_module
my_module.test(10,20) #调用其函数
不想在导入模块的时候执行那个函数调用
在my_module.py 文件里面
def test(a,b):
	print(a+b)
if __name__ =='__main__' #有这句话就能在我们右键运行的时候测试我们函数,在正常文件导入这个模块时调用,又不执行我们的测试函数
	test(1,2)
	
在my_module.py文件中执行时,if后面判断将是true
在

——all——变量

如果一个模块中有'all'变量,当使用'from xxx import *' 导入时,只能导入这个列表中的元素

# my_module.py
__all__=['test_A'] #这个里面是你能导入的函数名

def test_A():
    print('testA')

def test_B():
    print('testB')
from my_module import *

test
test_A()

python 包

从物理上看,包就是一个文件夹,在该文件夹下包含了一个

__init__.py文件,该文件夹可用于包含多个模块,从逻辑上看,包的本质依然是模块

my_module1.py
my_module2.py     -->__init__.py => Package包

包的作用:当我们的模块文件越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块
新建包'my_package'
新建包内模块:'my_module'和'my_module2'
模块内代码如下

[new]->[Python Package] =>输入包名=》新建功能模块
import 包名.模块名
包名.模块名.目标

import my_package.my_module1
引入了包中的模块
my_package.my_module1.info_print1()

或者可以通过这个:
from my_package import my_module
my_module.print()

更具体的导入
from my_package.my_module import print
print()

导入包

注意:必须在

__init__.py 文件中添加 __all__ = [],控制允许导入的模块列表
# 包中的__all__和模块中的__all__一样有着控制功能

from 包名 import *
模块名.目标

form my_package import *
#包中的my_module模块的info_print()方法
my_module.info_print()
# 包中的my_module模块的info_print()方法


可以直接在包里面的
package
__init__ = [],在[]中放入这个包里面的模块名
# 通过__all__变量,控制import *,控制import能导入的内容

什么是第三方包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
def print_file_info(file_name):
	f = None
   	try:
        f = open(file_name,"r",encoding="UTF-8")
        content = f.read()
        print("文件的全部内容如下:")
        print(content)
    except	Exception as e:
        print(f"程序出现异常了,原因是,{e}")
    finally:
        if f:#如果变量是None
            f.close()

数据可视化

json:一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据

JSON本质上是一个带有特定格式的字符串

主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互

import json
#准备符合格式json格式要求的python数据
data= [{"name":"老王","age":16},{"name":"张三","age":17}]

#通过json.dumps(data)方法把Python数据转化为了json数据
data = json.dumps(data)

#通过json.loads(data)方法把json数据转化为python数据
data = json.loads(data)
# 导入json模块
import json

#准备列表,列表中每一个元素都是字典,将其转换为JSON
data = [{"name":"张大山","age" : 11},{"name":"刘德华","age" : 20},{"name":"李大钊","age" : 30}]
json_str = json.dumps(data, ensure_ascii=False)
print(type(json_str))
print(json_str)

#准备字典,将字典转换为JSON
d = {"name":"周杰伦","addr":"台北"}
json_str = json.dumps(d,ensure_ascii=False)
print(type(json_str))
print(json_str)

#将Json字符串转变回python数据类型
l = json.loads(json_str)
print(type(l))
print(l)

pyecharts模块

如果想要做出数据可视化效果图,可以借助pyecharts模块来完成

#导包,导入Line功能构建折线图对象
from pyecharts.charts import Line
#得到折线图
line = Line()
#添加x轴数据
line.add_xaxis(["中国","美国","英国"])
#添加y轴数据
line.add_yaxis("GDP",[30,20,10])
#生成图标
line.render()

pyecharts配置选项

pyecharts模块中有很多的配置选项,常用到2个类别的选项:

  • 全局配置选项
  • 系列配置选项
#set_global_opts方法
#这里全局配置选项可以通过set_global_opts方法进行配置,相应的选项和选项的功能如下:

img

#导包,导入Line功能构建折线图对象
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
#得到折线图
line = Line()
#添加x轴数据
line.add_xaxis(["中国","美国","英国"])
#添加y轴数据
line.add_yaxis("GDP",[30,20,10])
# 设置全局配置项set_global_opts来设置,
line.set_global_opts(
    title_opts=TitleOpts(title = "GDP展示",pos_left="center",pos_bottom = "1%"),
    lengend_opts = LegendOpts(is_show = True),
    toolbox_opts=ToolboxOpts(is_show=True),
    visualmap_opts = VisualMapOpts(is_show = True)



)







#生成图标
line. Render()
posted @ 2023-10-06 14:55  lycheezhang  阅读(6)  评论(0编辑  收藏  举报