这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~!

文件存储(I/O操作)

何为I/O?

I/O分别对应着英文input和output的缩写,代表着输入和输出.分别对应着我们文件的读和写的过程,

当我们对一个文件进行读取的操作的时候,程序会以我们要读取的文件为目标,通过输入流操作,将文字读取到缓存区,以便以后调用.

当我们对一个文件进行写的操作的时候,程序会将我们存在缓冲区中的数据通过输出流写到我们的目标文件里.

Python的键盘输入

python中等待键盘的函数有两个,raw_input和input,两者作用效果相同,记录键盘的输入并返回结果.

s=raw_input('请输入任意内容:

')

print '输出:'+s

>>>请输入任意内容:

hello

输出:hello

复制代码

raw_input函数返回的是一个字符串对象,我们可以直接打印出输入结果.

s=input('请输入任意内容:

')

print '输出:',s

>>>请输入任意内容:

5*6

输出: 30

复制代码

input函数返回的是一个对象,他和raw_input的根本区别是可以输入表达式,并且返回表达式的结果.

Python文件操作

Python的文件操作都是由file对象处理.

open函数

file object = open(file_name [, access_mode][, buffering])

复制代码

Python提供了内置函数open来获取file对象,这里我们仔细的讲解一下相关此参数的作用.

file_name 文件路径.代表着我们要写入的文件名或者我们要读取的文件,注意:这里的路径是相对路径,相对于我们程序所在目录的路径

access_mode 打开文件的模式.可不填,默认为只读.也可根据需求改变,以下是全部的模式.

模式

说明

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

buffering 用于设置缓存策略

在二进制模式下,使用0来切换缓冲;在文本模式下,通过1表示行缓冲(固定大小的缓冲区)。

在不给参数的时候,二进制文件的缓冲区大小由底层设备决定,可以通过io.DEFAULT_BUFFER_SIZE获取,通常为4096或8192字节

我们简单的举个例子:(test.py文件代码)

test.py文件代码,f/b

f=open('f/b.txt') #我们读取本模块目录下的f文件夹中的b.txt文件,其他两个参数默认

print f

prin io.DEFAULT_BUFFER_SIZE

>>> #可以发现文件对象默认模式是r

8192 #设备默认缓冲区为8192字节(注意,这里需要导入io模块才可使用io函数)

复制代码

File对象相关函数

通过Python的open函数我们可以得到File对象,而文件存储的操作就是针对file对象来进行的.

file对象有几个常用的函数,下面我们来一一讲解:

close函数

close函数的作用是刷新缓冲区.并关闭file对象的操作流,此后便不能再进行读写操作了.当这个file对象再指定到新的文件对象时,file对象会先关闭以前的文件对象.所以,当我们对一个文件操作完毕之后,应当养成良好的关闭习惯,也就是调用close函数

f=open('f/b.txt')

f.close()

复制代码

write函数

write函数是file对象的数据写入函数,通过该函数可以将我们的字符串数据或者二进制数据写入到文件夹中.需要注意的是,如果我们需要数据换行,要另外写入换行符.

该函数需要有文件的写权限

f=open('f/b.txt','a+') #这里我们制定了文件模式是读写模式(具体可参考上面的表),并且指针放在末尾

f.write('我是一个小小的python爱好者,我在学习python')

f.write('虽然学习之路艰辛

但我不放弃') #注意这里我们中间加了一个换行符

f.close() #操作完毕关闭对象

复制代码

执行以上代码之后,你可以去相关目录打开b.txt文件查看内容:(但我不放弃这句因为换行单独成一行了)

我是一个小小的python爱好者,我在学习python虽然学习之路艰辛

但我不放弃

复制代码

read函数

f.read(n) #参数n表示读取的文件长度,这里的长度是字节长度,参数不填的时候默认为默认缓冲区大小,上面我们打印过,是8192个字节长度

复制代码

Tips:一个gbk编码的汉字占二个字节,一个utf-8编码的汉字占三个字节.(所以要想输出一个完整的utf-8的字符,最少长度要为3)

read是从一个打开的文件对象中读取数据.

f=open('f/b.txt','a+')

f.seek(0) #seek是定位函数,由于我们使用了a+文件模式,导致文件操作指针永远在最后面,而最后面是没有数据的,所以我们将光标恢复到开头,这样我们就可能读取到数据了.

str=f.read() #

f.close()

print str

>>> 我是一个小小的python爱好者,我在学习python虽然学习之路艰辛

但我不放弃

复制代码

其实read函数还有几个衍生的方法,比如readline,读取一行,大家可以自己试试.

seek和tell函数

seek()和tell()是两个文件定位函数,一个是设置文件的操作位置,一个是获取文件的操作位置(注意:我们平常的文件读写操作都是会改变文件的操作位置的),有时候我们可能需要在某一段字符串的中间插入一端字符串,这时我们就可以利用定位函数来达到我们的需求.

f=open('f/b.txt','r+')

f.seek(0) #设置光标从0开始读

str=f.read(27)

print str

f.seek(27) #设置从位置27字节开始写

f.write('哈哈哈')

f.close()

>>> 我是一个小小的python哈哈哈,我在学习python虽然学习之路艰辛

但我不放弃

复制代码

上面的例子中,我们直接在中间插入了'哈哈哈'字符

文件删除

文件删除我们需要用到python的os模块,使用时需要导入该模块.

使用os模块的remove方法开始删除

os.remove(filepath) #参数传我们需要删除的文件路径

复制代码

以上就是我们文件操作,从创建,读写,到删除的整个过程,当然我们因为是入门篇,只是介绍了最基本的用法,不过万事不变其宗,基础牢固了,我们才能更好的向外拓展!学习之路慢慢其修远兮!

Python异常

什么是异常

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

当我们的程序出现错误的时候,编译器都会告诉我们错误的地方,可是当我们程序上线之后,一旦遇到错误,程序便会宕机,这是我们不能容忍的,这时候就需要用到异常处理了.

python标准异常

首先我们来看个表,里面基本罗列了python中我们所有会遇到的异常(不用一一记住,脑袋过一遍就可以了):

异常名称

异常描述

BaseException

所有异常的基类

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

Exception

常规错误的基类

StopIteration

迭代器没有更多的值

GeneratorExit

生成器(generator)发生异常来通知退出

StandardError

所有的内建标准异常的基类

ArithmeticError

所有数值计算错误的基类

FloatingPointError

浮点计算错误

OverflowError

数值运算超出最大限制

ZeroDivisionError

除(或取模)零 (所有数据类型)

AssertionError

断言语句失败

AttributeError

对象没有这个属性

EOFError

没有内建输入,到达EOF 标记

EnvironmentError

操作系统错误的基类

IOError

输入/输出操作失败

OSError

操作系统错误

WindowsError

系统调用失败

ImportError

导入模块/对象失败

LookupError

无效数据查询的基类

IndexError

序列中没有此索引(index)

KeyError

映射中没有这个键

MemoryError

内存溢出错误(对于Python 解释器不是致命的)

NameError

未声明/初始化对象 (没有属性)

UnboundLocalError

访问未初始化的本地变量

ReferenceError

弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError

一般的运行时错误

NotImplementedError

尚未实现的方法

SyntaxError

Python 语法错误

IndentationError

缩进错误

TabError

Tab 和空格混用

SystemError

一般的解释器系统错误

TypeError

对类型无效的操作

ValueError

传入无效的参数

UnicodeError

Unicode 相关的错误

UnicodeDecodeError

Unicode 解码时的错误

UnicodeEncodeError

Unicode 编码时错误

UnicodeTranslateError

Unicode 转换时错误

Warning

警告的基类

DeprecationWarning

关于被弃用的特征的警告

FutureWarning

关于构造将来语义会有改变的警告

OverflowWarning

旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning

关于特性将会被废弃的警告

RuntimeWarning

可疑的运行时行为(runtime behavior)的警告

SyntaxWarning

可疑的语法的警告

UserWarning

用户代码生成的警告

异常的捕捉和处理

python中的异常捕捉处理和java或者oc差不多.都是一个代码块:

try:

#可能会出现异常的代码

except Exception as e:

#出现异常的信息,这里我们可以将错误信息上传

else:

#如果没有异常发生

finally:

#这里的代码不管出不出现异常都会调用,可以用来做一些文件关闭,索引关闭的操作

复制代码

我们来做个简单的异常捕捉的例子:

f=None

try:

f = open('f/b.txt', 'r+') #这里我们打开一个f目录下的b.txt文件,其实这个文件是不存在的,应该会发生异常

except Exception as e: #这里我们使用的是异常的基类,可以先删除所有异常,毕竟有时候我们也不知道到底发生的异常是属于哪个类(当然,精确点总是更好的)

print e #我们将异常打印出来

finally:

if f:

f.close() #不管发没发生异常,我们都希望f对象存在的时候要关闭操作

>>> [Errno 2] No such file or directory: 'f/b.txt' #确实发生了文件或者目录找不到的异常

复制代码

以上就是异常的的常用用法,是不是很简单,日常开发中,我们可能会遇到很多异常处理,我们需要根据自己的需求对代码块进行更改,以便以我们的代码可以抗拒任何恶劣的环境.

Q&A

到这里,我们这一章就讲完了.到了这里,我们已经算是入门了,基本的python语法,对象,函数,写法,我们都已经学会了,下一章开始,我们学习一点更加深一点的东西,多线程

python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉相关推荐

  1. 不是python文件操作的相关函数_从零开始学Python(七):文件存储I/O流和异常捕捉

    这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~! 文件存储(I/O操作) 何 ...

  2. python 相对路径报错_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  3. 跟我从零开始学python之一_从零开始学 Python 之运算符

    从零开始学 Python 之运算符 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  4. python实现素数筛选法_从零开始学Python系列-第6讲:循环结构

    应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景.例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令.在这个场景 ...

  5. python37从零开始学_从零开始学Python【37】--朴素贝叶斯模型(理论部分)

    [知识铺垫] 在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式: 如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中P(AB) ...

  6. 从零开始学python项目_从零开始学Python程序设计

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  7. 从零开始学python网络爬虫读书笔记_从零开始学Python网络爬虫 中文pdf

    资源名称:从零开始学Python网络爬虫 中文pdf 第1章 Python零基础语法入门 1 第2章 爬虫原理和网页构造 17 第3章 我的第一个爬虫程序 26 第4章 正则表达式 45 第5章 Lx ...

  8. python基础实例教程 微课版-从零开始学Python(微课视频版)

    基本信息 书名:从零开始学Python(微课视频版) :89.80元 作者:何明 编著 著 出版社:中国水利水电出版社 出版日期:2020_04_01 ISBN:9787517083818 字数:64 ...

  9. python import request 不报错_爬虫学习路径整理及安装环境遇到的坑

    学习路径是我自己提炼和精选的,只适合我个人,因为虽然有技术基础但是我刚入门爬虫视野很窄不专业,为避免误导你们,你们最好参考知乎上大牛已经回答的好答案.我发这篇文章,目的是给自己看的.ps,专栏下每篇文 ...

最新文章

  1. 又有多所高校延迟寒假开学
  2. CAPSNET:具有自我注意路由的胶囊网络
  3. 分布式缓存系统 Memcached CAS协议
  4. Git的使用-将本地项目上传至Github/Github下载代码至本地-MAC
  5. no.8 C控制语句:循环 01
  6. js中json的添加和指定位置的删除
  7. 蓝桥杯java第四届决赛第二题--连续奇数和
  8. linux-shell命令之mount【挂载命令】
  9. java 重置定时器_可重置Java定时器
  10. 计算机一级办公软件试题,计算机一级《MS Office》练习题(含答案)
  11. java集合笔试编程题_Java 基础算法及编程笔试题集合
  12. 网易MCtalk泛娱乐科技峰会:泛娱乐的未来时代属于科技创新者
  13. Twitter 惊现密码漏洞,强制 3.3 亿用户修改密码!
  14. Java break语句,标签
  15. 华为防火墙产品介绍和工作原理介绍
  16. 税控服务器管理系统发票号段重复,两个税控盘都有同样的发票号码可以吗
  17. linux 怎么查看谁登过这台服务器,如何查看linux服务器是否被入侵
  18. 数据库设计—图书管理数据库系统设计
  19. Origin抗锯齿和出现大C
  20. C#打造一个开源webgis(四)地图客户端(中)

热门文章

  1. C#LeetCode刷题之#225-用队列实现栈(Implement Stack using Queues)
  2. C#LeetCode刷题之#867-转置矩阵(Transpose Matrix)
  3. Linux入门学习(三)
  4. 记录一次可能的order by注入
  5. 感谢相信你鼓励你的人
  6. java组合与继承始示例_排列组合:用公式示例解释的差异
  7. android tv ko,Android TV 键值修改流程
  8. python 元类 详解_Python 元类详解 __new__、__init__、__call__、__metacalss__
  9. rabbitmq实战_RabbitMQ实战(四) - RabbitMQ amp; Spring整合开发
  10. ubuntu下安装proxychains