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 文件,所 ...
随机推荐
- MySql 常用时间函数
1.date() 提取日期或日期时间表达式的日期部分 select date(create_time) from blog_article; 2.date_format() select date_f ...
- 6.反编译 java---class (字节码文件)---反编译(IDEA):
- Java入门 - 语言基础 - 05.基本数据类型
原文地址:http://www.work100.net/training/java-basic-datatype.html 更多教程:光束云 - 免费课程 基本数据类型 序号 文内章节 视频 1 概述 ...
- Android studio 报错Error:Internal error: (java.lang.ClassNotFoundException) com.google.wireless.android.sdk.stats.IntellijIndexingStats$Index
Android studio运行make build报错 解决方法 在studio的File-->Settings-->Build, Execution, Deployment---> ...
- Java中整数值的4中表示方式u
Java中整数值有4中表示方式:十进制.二进制.八进制和十六进制,其中二进制的整数以0b或0B开头:八进制的整数以0开头: 十六进制的整数以0x或0X开头,其中10-15分别以a-f(此处的a-f不区 ...
- [bzoj3930] [洛谷P3172] [CQOI2015] 选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- java小心机(6)| 多态的一些坑
对于"多态"的概念,想必大家都很熟悉了,但我们还是来回顾一下吧 class Actor { public void act(){ System.out.println(" ...
- 迈向Angular 2
目录 序言 XV第1章 Angular 2快速上手 1Web的进化——新框架时代 2ECMAScript的进化 2Web Component 3WebWorker 4从AngularJS 1.x中学到 ...
- [转]dll反编译工具(ILSpy)的使用
软件地址: 链接:https://pan.baidu.com/s/1YunJ3MAuNisGtl8YYzr4hw 密码:ejx8 工具使方法 1.将压缩文件进行解压,打开exe文件. 2.打开后,选择 ...
- ES6笔记分享 part 1
ECMAScript ES6 从一脸懵逼到灵活运用 var let const var let const 的比较 声明与赋值 var声明的变量是可以重新赋值的,也可以重复声明 let和const声明 ...