python 学习 (三)----文件操作、RESTful
1.单引号
python中不区分单引号和双引号,与shell脚本不一样。
2.Python 模块(Module)
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。可以认为是变量、函数、类这些工具的“工具箱”,模块时可以被其它模块所使用的。
模块定义好后,我们可以使用 import 语句来引入模块;此时调用模块中的变量、函数、类需要在前面加上模块名和点符号,即模块名.变量、模块名.函数名()、模块名.类名()。
Python 的 from 语句是让你从模块中导入一个指定的部分到当前命名空间中;直接使用变量、函数、类,无需指明模块名。
3.文件操作
补充两个知识点:(1)Python有一个能打开文件的内置函数--open()。其参数可以是一个文件路径,需要注意的是 路径是字符串类型,需要加上引号。此外,在写路径的时候,应该使用斜杠(即 / 字符)或者使用两个反斜杠(即 \\ 字符),不要使用一个反斜杠(即 \ 字符)。 因为一个反斜杠(\)在Python中表示转义字符,它会将个别字符进行转义,表示了不同的意思。例如,\n表示换行;\r表示回车等待。 (2) 相对路径:相对路径是指 目标文件 相对于 当前文件 的路径。首先了解下相对路径的几个写法规则: ./(即一点一斜杆)表示当前文件所在的目录;../(即两点一斜杆)表示当前文件所在的上层目录;如果是上上层目录,可以用../../来表示。此外,需要说明的是如果是在当前目录下,我们也可以把点斜杠去点,例如 XXX.txt 就相当于./XXX.txt。
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。我们写入文件内容时,系统并不会立刻就把所有数据写入到磁盘,它是先放到内存中缓存,等到空闲的时候再慢慢写入到磁盘。当调用close()方法时,系统才能保证把剩余没有写入的数据全部写入到磁盘。假如我们忘记调用了close()方法,那很可能导致我们的数据遗失。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode:决定了打开文件的模式:只读,写入,追加等。mode 可以是 'r' 如果文件只读, 'w' 只用于写 (如果存在同名文件则将被删除), 和 'a' 用于追加文件内容; 所写的任何数据都会被自动增加到末尾. 'r+' 同时用于读写。 mode 参数是可选的; 'r' 将是默认值。
r+:打开文件用于读写,新内容插在文件最前面;
w+:打开文件用于读写,文件原有内容被删除;
a+:打开文件用于读写,新内容插在文件最后面。
下图总结了这几种模式
可以使用read()函数读取文件内容,该函数会返回一个字符串。
可以使用write()函数向文件中写入内容,该函数接收一个字符串类型的参数。
也可以调用readlines() 或 writelines(字符串列表) 进行读取或写入;前者会返回一个字符串列表,每一个元素表示文件中的一行文本,后者需要传入一个字符串列表,进行写入。
最后非常重要的一点是,在文件读、写完毕后,需要调用close()函数关闭文件对象释放系统资源。
由于文件读写时都有可能产生IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现:
try: f = open('/path/', 'r') print(f.read()) finally: if f: f.close()
每次打开后都要显式调用close(),这么写实在太繁琐,Python引入了with
语句来自动帮我们调用close()
方法:
with open('demo.text', 'w') as f: print(f.write('demo'))
主要时通过格式的缩进行来实现的,当with下一行出现缩进行,就会自动调用close()
方法
注意:在Windows 系统中,路径 中有\,为防止转移, 前面添加个r,例如
with open(r'C:\testpy\demo.text', 'w') as f: print(f.read())
4.Restful 前后端分离
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多的采用。
如果一个架构符合REST原则,就称它为RESTful架构。
要理解RESTful架构,需要先理解Representational State Transfer这个词组的意思,它的每一个词代表了什么涵义。
资源(Resources)
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。所谓"上网",就是与互联网上一系列的"资源"互动,调用它的URI。
表现层(Representation)
"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。
状态转化(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
针对不同操作,服务器向用户返回的结果应该符合以下规范。
GET /collection:返回资源对象的列表(数组) GET /collection/resource:返回单个资源对象 POST /collection:返回新生成的资源对象 PUT /collection/resource:返回完整的资源对象 PATCH /collection/resource:返回完整的资源对象 DELETE /collection/resource:返回一个空文档
以Flask-RESTful为例,主要构建步骤:
step 1.创建api对象;
step 2.定义resource的子类(特别是子类的方法);
step 3.绑定路由;
step 4.app启动(app.run())。
5.Postman
Postman是一种网页调试与发送网页http请求的chrome插件。是一个很强大的 API调试、Http请求的工具,可以用来很方便的模拟get或者post或者其他方式的请求来调试接口。
6.requirements.txt
python项目项目中包含一个requirements.txt,主要是用来记录所有依赖包及其版本号,在新环境部署时使用,特别时跨平台部署(Windows<==>Linux).
requirements.txt可以通过pip命令自动生成和安装。
生成requirements.txt文件:
pip freeze > requirements.txt
安装requirements.txt依赖:
pip install -r requirements.txt
7. Python 异常处理
try: 执行代码 except: 发生异常时执行的代码 else: 没有异常时执行的代码 finally: 不管有没有异常都会执行的代码
学习转载
1.Python File(文件) 方法
https://www.runoob.com/python/file-methods.html
2.Python3 输入和输出
https://www.runoob.com/python3/python3-inputoutput.html
3.python3 文件操作with open()方法用法解析
https://www.jianshu.com/p/7e81de91714b
4.https://www.bilibili.com/video/BV1TJ411Y7JX?p=138&spm_id_from=pageDriver
5.理解RESTful架构 Restful API设计指南