前言

若在之前写代码的方式中,从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序列化的更多相关文章

  1. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  2. Python学习笔记—itertools模块

    这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...

  3. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  4. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  5. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  6. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  7. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

  8. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  9. Python学习笔记14—模块

    在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...

  10. Python学习笔记 - day9 - 模块与包

    模块与包 一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名加上.py的后缀,导入一个py文件,解释器解释该py文件,导入一个包,解释器解释该包下的 __init__.py 文件,所 ...

随机推荐

  1. background-position和position

    1.background-position:表示背景定位的属性.描述属性值时,有两种方式:一是像素描述:而是单位描述. (1)像素描述: 格式如下: background-position:向右偏移量 ...

  2. 1.异常(Error和Exception)

    什么是异常 比如上午我们一般是开车去上班,正常情况下,一般都不会迟到,但是今天突然有个问题,车坏了或者限行了,于是乎你改坐公交了,就有可能会迟到,这就属于一种异常的情况.在实际生活中呢,可能会遇到很多 ...

  3. 信息: TLD skipped. URI: http://www.fusioncharts.com/jsp/core is already defined

    二月 02, 2018 11:43:28 上午 org.apache.catalina.startup.TaglibUriRule body 信息: TLD skipped. URI: http:// ...

  4. 查看jvm内存信息

    Runtime.getRuntime().maxMemory(); //最大可用内存,对应-Xmx Runtime.getRuntime().freeMemory(); //当前JVM空闲内存 Run ...

  5. Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5

    创建内联的辅助器方法 和 拓展方法 好像类似的功能. 不过写在前台更直观

  6. 机器学习-TensorFlow应用之 binned features, Cross features和optimizer

    概述 这一节主要介绍一下TensorFlow在应用的过程中的几个小的知识点,第一个是关于features的处理的,例如Bucketized (Binned) Features 和 Feature sc ...

  7. SIR模型预测新冠病毒肺炎发病数据

    大家还好吗? 背景就不用多说了吧?本来我是初四上班的,现在延长到2月10日了.这是我工作以来时间最长的一个假期了.可惜哪也去不了.待在家里,没啥事,就用python模拟预测一下新冠病毒肺炎的数据吧.要 ...

  8. Spring 中读取文件-ResourceLoaderAware

    Spring 中读取文件-ResourceLoaderAware 概述 Spring ResourceLoader为我们提供了一个统一的getResource()方法来通过资源路径检索外部资源.从而将 ...

  9. python下的selenium和chrome driver的安装

    selenium是一款支持多种语言.多种浏览器.多个平台的开源web自动化测试软件,测试人员可用python.java等语言编写自动化脚本,使得浏览器可以完全按照你的指令运行,大大节省了测试人员用鼠标 ...

  10. Spring注解开发系列Ⅴ --- 自动装配&Profile

    自动装配: spring利用依赖注入和DI完成对IOC容器中各个组件的依赖关系赋值.自动装配的优点有: 自动装配可以大大地减少属性和构造器参数的指派. 自动装配也可以在解析对象时更新配置. 自动装配的 ...