PYTHON 学习笔记4 模块的使用、基本IO 写入读取、JSON序列化
前言
若在之前写代码的方式中,从Python 解释器进入。退出后再次进入,其定义的变量、函数等都会丢失。为了解决这个为,我们需要将需要的函数、以及定义的变量等都写入一个文件当中。这个文件就叫做脚本
随着程序变得越来越长,或者你会将一些函数分类封装到几个文当中。以便于维护
为了支持这些,Python 有一种方法就是将定义函数放在一个文件当中。并在其他脚本执行的时候使用他们,这样的文件被称作模块
尝试
模块是一个包含Python 定义和语句的文件。文件名就是模块名
,以.py
后缀结尾
在一个模块内,可以使用全局变量 __name__
获得
我们这里使用IDE 创建一个Python 项目,这是使用 PyCharm
创建一个项目
打开IDE 后,创建一个项目,这里因为我们之前就已经安装过Python 的环境了。所以创建的时候,我们就选择已存在的解释器即可。
还有一种操作就是创建一个虚拟的环境,这样做的目的是为了让每个Python 项目进行一个隔离。互不影响。这个后面再进行介绍
这里选择的,就是我们之前安装Python的目录。
选择 System Interpreter
,然后选择安装目录下的 python.exe
即可。
创建一个模块
创建一个 fibo.py
模块后,加入一些函数到里面,_init_.py
是默认创建的一个入口。
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
我们在入口init.py
引入我们刚创建的模块,而后执行模块里面的函数即可
import fibo as fi
fi.fib(100)
----------------
0 1 1 2 3 5 8 13 21 34 55 89
模块名称后若带有 as
则名称与导入的模块直接绑定在一块。
另一种导入
from fibo import fib,fib2
fib(100)
---------------
0 1 1 2 3 5 8 13 21 34 55 89
这种方式,将需要的函数直接导入的现有模块的符号表里。直接使用
模块搜索路径
当我们开始导入一个名为 fibo
的模块的时候,首先解释器寻找拥有该名称的内置模块,如果没有找到。解释器则从 sys.path
寻找这个模块,那sys.path
初始化包含哪些呢?
import sys
print(sys.path)
-----------------
['E:\\Python\\demo','D:\\python3\\DLLs', 'D:\\python3\\lib', 'D:\\python3', 'D:\\python3\\lib\\site-packages']
上面的内容中,我们大致可以看到,所具有的的目录有:
- 工作目录
- 以及Python 安装目录下的DLLS/lib/site-packages 这些目录
建立Python 包
包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法。 例如,模块名 A.B 表示 A 包中名为 B 的子模块。正如模块的使用使得不同模块的作者不必担心彼此的全局变量名称一样,使用加点的模块名可以使得 NumPy 或 Pillow 等多模块软件包的作者不必担心彼此的模块名称一样。
必须要有 __init__.py
文件才能让 Python 将包含该文件的目录当作包
在最外层建立一个__inint__.py
创建了两个包filters
test
我们在最外层的文件内引入指定包下面的模块
import test.fibo as fib
print(dir(fib))
---------------
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']
dir()函数
内置函数 dir() 用于查找模块定义的名称。 它返回一个排序过的字符串列表:
注意:它列出所有类型的名称:变量,模块,函数,等等。
输出输出
有几种方法可以显示程序的输出;数据可以以人类可读的形式打印出来,或者写入文件以供将来使用
格式化字符串
要使用 格式化字符串字面值 ,请在字符串的开始引号或三引号之前加上一个 f 或 F 。在此字符串中,你可以在 { 和 } 字符之间写可以引用的变量或字面值的 Python 表达式。
year = 2020
event = 'Python'
test = f'hello world in {year} study {event}'
print(test)
------------------
hello world in 2020 study Python
控制最小宽度
import math
print(f'The value of pi is approximately {math.pi:.3f}.')
-----------------
The value of pi is approximately 3.142.
在 ':' 后传递一个整数可以让该字段成为最小字符宽度。这在使列对齐时很有用。
format() 方法
str = 'hello {} my name is {}'
print(str.format('python','helloworld'))
-----------------------
hello python my name is helloworld
读写文件
open() 返回一个 file object,最常用的有两个参数: open(filename, mode)
在处理文件对象时候,最好使用 with
关键字,优点是:子句结束后,文件会正常的关闭、即使发生异常也会正常关闭、相比于 try-finally
要简短
with open('E:\\Python\\demo\\file.txt') as f:
read_data = f.read()
print(read_data)
----------
hello world
完成一个文件的读取。这里就不需要进行关闭了。with
关键字自动关闭
read(size)
read 方法读取文件的内容。在默认模式下,按照text mode 进行读取。读取后将其作为字符串返回。而size 是一个可选参数。表示读取字符数量,若为复数或者省略的话,则取出全部。
如果已到达文件末尾,f.read() 将返回一个空字符串 ('')。
readline()
从文件中读取一行,遇到换行符则停止。也可以尝试使用使用循环来读取
with open('E:\\Python\\demo\\file.txt') as f:
for line in f:
print(line,end='')
------------------
hello world
Python
写入文件
f.write(string)
会把 string 的内容写入到文件中,并返回写入的字符数。这里使用的模式是r+
其实就是同时可以进行文件的读取和写入。但是写入的内容需要在文件关闭后才可以读取出来,不能同时读取写入。
with open('E:\\Python\\demo\\file.txt','r+') as f:
strs = 'new line in write'
f.write(strs)
----------------
文件内容:
new line in write
JSON 数据
JSON 数据在后端也算是很优秀的。不管是字符/数组/数字/日期,他都可以使用字符串的形式存储起来。可以直接转换为对象供我们直接使用。用起来相当的方便啊。
Python 允许你使用称为 JSON (JavaScript Object Notation) 的流行数据交换格式,而不是让用户不断的编写和调试代码以将复杂的数据类型保存到文件中。
- 对象->json字符串: serialzing
- json字符串-> 对象: deserializing
dumps(obj)
使用这个 方法 将 obj 序列化为 JSON 格式的 str
import json
obj = [1, 'simple', 'list']
print(type(obj))
str = json.dumps(obj)
print(str,'type',type(str))
--------------
<class 'list'>
[1, "simple", "list"] type <class 'str'>
dump(x,f)
- x 表示输入一个对象
- f 将对象序列保存到一个文本文件中
使用这个 dump(x,f) 将 obj 序列化为 JSON 格式化流形式的 fp (支持 .write() 的 file-like object)。
import json
obj = [1, 'simple', 'list']
with open('E:\\Python\\demo\\file.txt','r+') as f:
json.dump(obj,f)
----------------------
文件内容:
[1, "simple", "list"]
切记:这里面打开的file 需要支持写入
load(f)
使用这个 load(f) 将 fp (一个支持 .read() 并包含一个 JSON 文档的 text file 或者 binary file) 反序列化为一个 Python 对象。
import json
obj = [1, 'simple', 'list']
with open('E:\\Python\\demo\\file.txt','r+') as f:
obj = json.load(f)
print(obj,'type',type(obj))
----------
[1, 'simple', 'list'] type <class 'list'>
小结
这一节结束后,我们应该具备基本的打开文件/写入文件等基本的IO 操作。以及如何导入模块的使用。下一节的话,我们应该要开始学习面向对象最重要的一部分:类与对象了。
参考
https://docs.python.org/zh-cn/3/
PYTHON 学习笔记4 模块的使用、基本IO 写入读取、JSON序列化的更多相关文章
- Python学习笔记之模块与包
一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...
- Python学习笔记—itertools模块
这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...
- python学习笔记_week5_模块
模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...
- python学习笔记(八)-模块
大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...
- Python学习笔记-常用模块
1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...
- Python学习笔记1—模块
模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11 (module11是module的子模块) 例: ...
- Python学习笔记2——模块的发布
1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...
- python学习笔记十——模块与函数
第五章 模块与函数 5.1 python程序的结构 函数+类->模块 模块+模块->包 函数+类+模块+包=Python pyth ...
- Python学习笔记14—模块
在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...
- Python学习笔记 - day9 - 模块与包
模块与包 一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名加上.py的后缀,导入一个py文件,解释器解释该py文件,导入一个包,解释器解释该包下的 __init__.py 文件,所 ...
随机推荐
- 聊聊HTTP请求那一些事_HttpWebRequest_一篇就够了
最近工作比较忙,很久没有写东西了,今天抽点时间整体一下最近工作的一个知识点小结.http请求对我们来说一点都不模式,程序员的我们有可能天天就是和这一些打交道.无论是BS架构的程序,前后端的数据交互, ...
- 使用Oracle Stream Analytics 21步搭建大数据实时流分析平台
概要: Oracle Stream Analytics(OSA)是企业级大数据流实时分析计算平台.它可以通过使用复杂的关联模式,扩充和机器学习算法来自动处理和分析大规模实时信息.流式传输的大数据可以源 ...
- 【红外DDE算法】数字细节增强算法的缘由与效果(我对FLIR文档详解)
[红外DDE算法]数字细节增强算法的缘由与效果(我对FLIR文档详解) 1. 为什么红外系统中图像大多是14bit(甚至更高)?一个红外系统的性能经常以其探测的范围来区别,以及其对最小等效温差指标.首 ...
- 玩转Django2.0---Django笔记建站基础九(一)(Auth认证系统)
第九章 Auth认证系统 Django除了有强大的Admin管理系统之外,还提供了完善的用户管理系统.整个用户管理系统可分为三大部分:用户信息.用户权限和用户组,在数据库中分别对应数据表auth_us ...
- 对于Makefile的基本使用
上课不听讲的后果就是课下疯狂补知识了 原文来自https://www.cnblogs.com/chenguanfu/p/4415072.html 在Windows下,只需要简单的点击以下make,re ...
- if循环后打印数据竖行输出和横排输出
代码A如下: def func(*kargs): return kargs, l = func(5,3,4,5,6) for i in l: print (i) 打印结果: ...
- obj2gltf安装详细教程
在线转换地址:http://52.4.31.236/convertmodel.html 在使用cesium的过程中需要使用到gltf模型,官方推荐使用obj2gltf插件将obj模型转换成gltf格式 ...
- .Net Core初识以及启动配置
.net程序员为什么要学习.net core .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net c ...
- ROS中3D机器人建模(四)
一.创建一个7-DOF机械臂机器人 创建一个名为seven_dof_arm.xacro的文件,写入相应的代码,其关节名称如下: bottom_joint shoulder_pan_joint shou ...
- html网页压缩保存到数据库,减少空间占用,实现过程遇到的解压问题
场景: python获取到网页,把网页gzip打包,并Base64编码保存: 由java负责Base64解码并解压二进制成html 遇到的问题: 1.python 的request,缺省就把gzip响 ...