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 文件,所 ...
随机推荐
- redis 数据类型之列表
1.lpush lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最左边 # 如: # conn.lpush('oo', 11,22,33) # ...
- Qt Installer Framework翻译(1)
IFW概览 Qt Installer Framework 提供了一组工具和程序来创建安装程序,并在不重写源代码的情况下将它们部署到所有受支持的桌面 Qt 平台上.安装程序具有本地化外观,并且可以感知运 ...
- python类型-序列-列表
列表类型也是序列式的数据类型,可通过下标或者切片操作来访问某一个或某一块连续的元素. 列表的元素是可变的,可包含不同类型的元素,列表类型的元素可以是另一个序列类型. 1.创建列表类型数据并赋值 列表使 ...
- 机器学习环境配置系列六之jupyter notebook远程访问
jupyter运行后只能在本机运行,如果部署在服务器上,大家都希望可以远程录入地址进行访问,这篇文章就是解决这个远程访问的问题.几个基本的命令就可以搞定,然后就可以愉快的玩耍了. 1.安装jupyte ...
- [mvc>actionResult] 封装一个操作方法的结果并用于代表该操作方法执行框架级操作
- 龙芯2f 8089D 笔记本 Debian 系统安装配置
版权声明:原创文章,未经博主允许不得转载 正文主要讲述安装社区版Debian6镜像(也有7和8,方法大同小异) 最后简单介绍了网络安装原版Debian 小记 非网络安装,没网也没事,再也不用担心网速度 ...
- xpath写法汇总(适用于appium、robotframework)
1.移动端应用,content-des包含“订单号” xpath=//android.view.View[contains(@content-desc,"订单号:")] 2.移动端 ...
- git上传本地代码到远程失败
出现这种错误的原因是由于我不小心勾选了这个
- SpringBoot+MyBatis项目Dao层最简单写法
前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...
- Flutter开发之Widget学习
一.Text 组件 属性 textAlign: TextAlign.left, -----文本对齐方式 maxLines: 1, ...