这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序确定离不开数据存储和网络两个模块,今天咱们就先来说讲python中的一种常见数据存储:文件存储!~!前端
I/O分别对应着英文input和output的缩写,表明着输入和输出.分别对应着咱们文件的读和写的过程,java
当咱们对一个文件进行读取的操做的时候,程序会以咱们要读取的文件为目标,经过输入流操做,将文字读取到缓存区,以便之后调用.python
当咱们对一个文件进行写的操做的时候,程序会将咱们存在缓冲区中的数据经过输出流写到咱们的目标文件里.小程序
python中等待键盘的函数有两个,raw_input和input,二者做用效果相同,记录键盘的输入并返回结果.缓存
s=raw_input('请输入任意内容:\n')
print '输出:'+s
>>>请输入任意内容:
hello
输出:hello
复制代码
raw_input函数返回的是一个字符串对象,咱们能够直接打印出输入结果.网络
s=input('请输入任意内容:\n')
print '输出:',s
>>>请输入任意内容:
5*6
输出: 30
复制代码
input函数返回的是一个对象,他和raw_input的根本区别是能够输入表达式,而且返回表达式的结果.多线程
Python的文件操做都是由file对象处理.函数
file object = open(file_name [, access_mode][, buffering])
复制代码
Python提供了内置函数open来获取file对象,这里咱们仔细的讲解一下相关此参数的做用.学习
模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。 |
wb | 以二进制格式打开一个文件只用于写入。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。 |
w+ | 打开一个文件用于读写。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。若是该文件已存在则将其覆盖。若是该文件不存在,建立新文件。 |
a | 打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容以后。若是该文件不存在,建立新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容以后。若是该文件不存在,建立新文件进行写入。 |
a+ | 打开一个文件用于读写。若是该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。若是该文件不存在,建立新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。若是该文件不存在,建立新文件用于读写。 |
咱们简单的举个例子:(test.py文件代码)编码
test.py文件代码,f/b
f=open('f/b.txt') #咱们读取本模块目录下的f文件夹中的b.txt文件,其余两个参数默认
print f
prin io.DEFAULT_BUFFER_SIZE
>>> <open file 'f/b.txt', mode 'r' at 0x1028581e0> #能够发现文件对象默认模式是r
8192 #设备默认缓冲区为8192字节(注意,这里须要导入io模块才可以使用io函数)
复制代码
经过Python的open函数咱们能够获得File对象,而文件存储的操做就是针对file对象来进行的. file对象有几个经常使用的函数,下面咱们来一一讲解:
close函数的做用是刷新缓冲区.并关闭file对象的操做流,此后便不能再进行读写操做了.当这个file对象再指定到新的文件对象时,file对象会先关闭之前的文件对象.因此,当咱们对一个文件操做完毕以后,应当养成良好的关闭习惯,也就是调用close函数
f=open('f/b.txt')
f.close()
复制代码
write函数是file对象的数据写入函数,经过该函数能够将咱们的字符串数据或者二进制数据写入到文件夹中.须要注意的是,若是咱们须要数据换行,要另外写入换行符. 该函数须要有文件的写权限
f=open('f/b.txt','a+') #这里咱们制定了文件模式是读写模式(具体可参考上面的表),而且指针放在末尾
f.write('我是一个小小的python爱好者,我在学习python')
f.write('虽然学习之路艰辛\n但我不放弃') #注意这里咱们中间加了一个换行符
f.close() #操做完毕关闭对象
复制代码
执行以上代码以后,你能够去相关目录打开b.txt文件查看内容:(但我不放弃这句由于换行单独成一行了)
我是一个小小的python爱好者,我在学习python虽然学习之路艰辛
但我不放弃
复制代码
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()是两个文件定位函数,一个是设置文件的操做位置,一个是获取文件的操做位置(注意:咱们日常的文件读写操做都是会改变文件的操做位置的),有时候咱们可能须要在某一段字符串的中间插入一端字符串,这时咱们就能够利用定位函数来达到咱们的需求.
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中咱们全部会遇到的异常(不用一一记住,脑壳过一遍就能够了):
异常名称 | 异常描述 |
---|---|
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' #确实发生了文件或者目录找不到的异常
复制代码
以上就是异常的的经常使用用法,是否是很简单,平常开发中,咱们可能会遇到不少异常处理,咱们须要根据本身的需求对代码块进行更改,以便以咱们的代码能够抗拒任何恶劣的环境.
到这里,咱们这一章就讲完了.到了这里,咱们已经算是入门了,基本的python语法,对象,函数,写法,咱们都已经学会了,下一章开始,咱们学习一点更加深一点的东西,多线程