您的位置:首页 > 编程语言 > Python开发

Head First Python 学习札记 2016-04-08

2016-04-08 17:45 537 查看
Python术语和常识

19将文件分开存储到不同数组中

20以写模式打开文件

21捕获异常的详细信息

22使用with来处理文件

23控制输出文本的样式

24利用pickle引擎的dump方法和load方法来处理数据

Python术语和常识:

10、第四章新知识点小结:

1)、在Python中else if写做elif

2)、字符串在调用upper()方法的时候,会得到一个全部大写的字符串

3)、ocals()方法:在程序中查找已经声明的变量名,in操作符用于检查成员关系。使用方法

if 'datas' in locals():


如果datas是已经申明的变量就返回true否则返回false

4)、str方法:可以将任何数据类型转化成字符串型

5)、print()方法的file参数可以指定数据发送/保存的路径

6)、strip()方法可以从字符串中去除不想要的空白

7)、finally组总会执行,而无论try/except语句中出现什么异常

8)、可以向except组中传入一个异常对象,并使用as关键字赋值给一个标志符

9)、with语句会处理所有已经打开的文件的关闭工作,无论哪里出现异常,都不会影响它。with语句也使用as关键字。

10)、sys.stdout是Python中所谓的标准输出,目标是屏幕,使用前需要import sys

11)、标准库pickle允许你容易而高效地将Python数据对象保存到磁盘以及从磁盘恢复

11、有些时候,需要查看输出结果,但是Python查程序执行完成之后就立刻关闭了Dos窗口,这样的话,实际上,是看不到什么的,这时在Python程序的结尾处加上input()函数,在执行到这里的时候就会自动的等待输入文本,之前输出的结果就能看到了。或者说在py文件所在的目录中打开Dos窗口,再运行py文件,就可以监控到报错了。

12、不可变类型:Python中的一些数据类型一旦赋值,这个值就是不可改变的了。

13、腌制:将数据对象保存到一个持久存储的过程

解除腌制:从持久存储中恢复数据

11、有些时候,需要查看输出结果,但是Python查程序执行完成之后就立刻关闭了Dos窗口,这样的话,实际上,是看不到什么的,这时在Python程序的结尾处加上input()函数,在执行到这里的时候就会自动的等待输入文本,之前输出的结果就能看到了。

2016-04-08

19、将文件分开存储到不同数组中:

还是使用sketch.txt文本

man = []
othor = []
try:
data = open('sketch.txt')
for each_line in data:
try:
(role, line_spoken) = each_line.split(':', 1)
line_spoken = line_spoken.strip()
if role == 'Man':
man.append(line_spoken)
elif role == 'Other Man':
othor.append(line_spoken)
except ValueError:
pass
data.close()
except IOError:
print('The data file is missing!')
#利用IDLE(Python解释器)执行到这里可能会报错,这样的话,可以先执行之前的代码,再执行下面两句。
print(man)
print(othor)


20、以写模式打开文件

out = open("data.out", "w") #data是所写的文件吗名,w是要使用的访问模式。


默认地,print()BIF显示数据时会使用标准输出(通常是屏幕)。要把数据写到一个文件,需要使用file参数来指定所使用的数据文件对象。

print("Norwegian Blues stun easily.", file=out) #Norwegian Blues stun easily.是写入内容,out是所写数据文件的对象名


在完成写入之后,要把关闭文件,这很重要,被称为刷新。

out.close()


访问模式辨析:

模式解释
w模式Python会打开指定的文件来完成写操作,如果这个文件已就存在了就清空它的内容,也就是完全清除。
a模式要追加写入一个文件,则需要使用访问模式a。
w+模式打开一个文件完成读和写两种操作,在执行写操作的时候,如果文件不存在会为你自动创建一个文件。
以写模式打开文件,代码如下:

'''这个Python脚本会把sketch.txt根据开头的是man还是other分成两部分存在不同的txt文件中'''
#先把sketch.txt中所有的文本都分别读到man和other中
man = []
other = []
try:
data = open('sketch.txt')
for each_line in data:
try:
(role, line_spoken) = each_line.split(':', 1)
line_spoken = line_spoken.strip()
if role == 'Man':
man.append(line_spoken)
elif role == 'Other Man':
other.append(line_spoken)
except ValueError:
pass
data.close()
except IOError:
print('The data file is missing!')

#再用open的写模式把man和other列表中的数据存到man_data.txt和other_data.txt中。
try:
#用写模式(w)打开文件这两个文件并且分别赋至给一个文件对象,将内容写入到man_data.txt和other_data.txt中。
man_file = open('man_data.txt','w')
other_file = open('other_data.txt','w')

#使用print()将指定的列表保存到指定的磁盘文件,数据的流动是man->man_file->man_data.txt的顺序
print(man, file=man_file)
print(other, file=other_file)

#不要忘记关闭这两个文件,刷新是很重要的。
man_file.close()
other_file.close()

#出现I/O异常在这里处理
except IOError:
print('File error')


注意try/excrpt后面的冒号:

读文件的时候,如果出现IOError,原始数据不会损坏

写文件的时候,在关闭文件之前出现IOError,数据是会损坏的,这时使用finally来拓展try

man = []
othor = []
try:
data = open('sketch.txt')
for each_line in data:
try:
(role, line_spoken) = each_line.split(':', 1)
#line_spoken调用strip函数返回一个新的除去了原字符串中空格的字符串
line_spoken = line_spoken.strip()
if role == 'Man':
man.append(line_spoken)
elif role == 'Other Man':
othor.append(line_spoken)
except ValueError:
pass
data.close()
except IOError:
print('The data file is missing!')

try:
man_file = open('man_data.txt','w')
other_file = open('other_data.txt','w')

print(man, file=man_file)
#如果执行到这里报错了,接下来的close语句就都不会执行了,这样会损坏数据的。
print(othor, file=other_file)

man_file.close()
other_file.close()

except IOError:
print('File error')

finally:
#把关闭文件的语句写在finally里面,这样的话,无论之前在哪里出现IOError都会执行finally里面的关闭语句
man_file.close()
other_file.close()


21、捕获异常的详细信息

为捕获的异常命名,然后转化成字符串类型再打印出来。

try:
data = open('missing.txt')
print(data.readline(), end='')
except IOError as err:
#为捕获的异常命名,然后转化成字符串类型再打印出来。
print('File erroe:'+str(err)
finally:
if 'data' in locals():
data.close()


·

22、使用with来处理文件

with使用了一种名为上下文管理协议的Python技术

try:
'''使用了with就不用再设置finally了,下面这句with语句等价于 data = open('sketch.txt', "w")加上finally语句'''
with open('sketch.txt', "w") as data:
print(data.readline(), end='')
except IOError as err:
print('File erroe:'+str(err)


还可以将两个文件操作写到同一个with里面

with open('man_data.txt', "w") as man_file,open('other_data.txt', "w") as other_file:


23、控制输出文本的样式

目前,在man_data.txt和other_data.txt中的是一个字符串数组,要把它改写成一行一行的样式。

可以通过改写print_lol函数来实现

'''为print_lol()添加第四个参数h=sys.stdout,来标识将把数据写入哪个位置,一定要设置缺省值。这样的话,在使用print_lol()不传fh参的时候也能直接打印在屏幕上(sys.stdout是一个与文件类型兼容的对象,名为标准输出,指输出到屏幕而不是任何路径下的文本。)'''

import sys
def  print_lol(the_list, indent=False, level=0, fh=sys.stdout):
for each_item in the_list:
if isinstance(each_item, list):
#这里的fh已经变成man_file了,也就是man_data.txt
print_lol(each_item, indent, level+1, fh)
else:
if indent:
for tab_stop in range(level):
#普通的print函数也有fh参数,将其设置为fh(也就是man_data.txt)就能把输出的内容写入man_data.txt了。
print("\t",end='', file=fh)
print(each_item)
else:
print(each_item, file=fh)


try:
with open('man_data.txt', "w") as man_file,open('other_data.txt', "w") as other_file:
print_lol(man,file=man_file)
print_lol(other,file=other_file)
except IOError as err:
print('File erroe:'+str(err)


24、利用pickle引擎的dump方法和load方法来处理数据

用pickle的dump()方法保存,用load()方法恢复。必须用二进制的方式打开这些文件。

1、导入pickle模块,import pickle

2、用pickle模块的内置函数dump和load来读取数据

#用pickle的dump()方法取数据,rb表示以2进制的方式写数据
with open('mydata.pickle','wb') as mysavedata:
#在这里存到mydata.pickle中的就是[1,2,'three']这个可变列表
pickle.dump([1,2,'three'],mysavedata)

#用pickle的load()方法读数据,wb表示以2进制的方式读数据
with open('mydata.pickle',"rb") as mysavedata:
#将恢复之后的数据赋值给一个标识符,load()方法里面直接填写要加载的数据名就好
a_list = pickle.load(mysavedata)

#一旦数据从Python的内存中读取到程序的运存中的时候,就可以当做普通数据处理了
print(a_list)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: