本博客是我边学python边写的,希望给有需要的人以帮助。
python中的基本输入机制是基于行的:从文本文件向程序读入数据时,一次会到达一个数据行。
python的open() BIF就是用来与文件交互,与for结合以读取文件。
使用open() BIF处理文件中的数据时,会创建一个迭代器从文件向代码输入数据行,一次传入一行数据。
the_file=open('text.txt');
#do something with the_file
the_file.close();
import os
os.getcwd() #获取当前工作目录
os.chdir('../目录名/子目录名') #切换目录
data=open('text.txt')
print(data.readline(),end='')
print(data.readline(),end='')
data.seek(0) #返回文件的起始位置
for each_line in data:
priint(each_line,end='')
data.close()
split()方法用于分割字符串
each_line.split(‘:’)
根据:分割字符串,返回一个字符串列表,赋至一个目标标识符列表,称为多重赋值(multiple assignment)
如果返回两部分:
(role,a_line)=each_line.split(':')
split有一个可选参数,控制着将数据行分解为多少部分,默认尽可能多的分解,如果置为1则分解为两部分。
如果一行没有:会出错
python字符串提供了一个find()方法,可尝试寻找子串,找不到返回-1,找到返回索引位置。
运行时错误称为异常(exception)
try/except机制:
try:
逻辑代码
except:
错误恢复代码
()包围的列表是不可变列表,称为元组(tuple),一旦创建,数据不可改变。
pass语句相当于空语句或null语句
检查文件是否存在:
import os
if os.path.exists(‘text.txt’)
…
指定特定异常:
如果要将异常处理代码设计为处理特定类型的错误,需要在except代码行上指定错误类型,可以将一般化的异常处理代码转化为特定的。
数据不符合期望的格式会出现ValueError,数据无法正常访问会出现IOError。
not关键字将一个条件取反
使用open()BIF打开文件时,可以指定使用什么访问模式,默认open使用模式r表示读、要完成写需使用模式w:
out=open(“data.out”,”w”)
默认的print BIF输出到标准输出,可指定file参数设定使用的数据文件对象。
print(“text”,file=out)
完成工作要关闭文件:
out.close()
追加写使用a,完成读写不清除使用w+,打开文件完成写但文件不存在会先建立文件再写。
用finally扩展try:
即将一定要执行的语句放在finally中善后:
try:
…
except IOError:
…
finally:
…
strip()方法去掉空白符,append()方法扩展列表
python的字符串不可变,元组与所有的数值类型均不可变。改变一个不可变的值会产生TypeError异常。
locals() BIF会返回当前作用域中定义的所有名的一个集合,如:
if ‘data’ in locals():
data.close()
产生一个异常并由except组处理时,python解释器将一个异常对象传入这个except组,可以在代码中使用这个异常:
except IOError as err:
print(“File error:”+str(err))
处理文件时try/except/finally模式很常用,所以python提供了一个语句来抽象出相关的一些细节,对文件使用with语句时,可大大减少需要编写的代码量,因为有了with语句就不再需要包含finally组来处理文件的关闭:
try:
data=open('text.txt',"w")
print("text",file=data)
except IOError as err:
print('File error:'+str(err))
finally:
if 'data' in locals():
data.close()
可简化为:
try:
with open("text.txt","w") as data:
print ("text",file=data)
except IOError as err:
print('File error:'+str(err))
with语句利用了一种上下文管理协议(context management protocol)的python技术。
还可以合并打开文件:
with open('text1.txt',"w") as file1,open('text2.txt',"w") as file2:
...
默认的print()会模拟python解释器实际存储列表数据的格式显示数据,不进行进一步的处理
标准输出是使用print时写的默认位置,python中指sys.stdout,可以从标准库的sys模块导入。
python提供了一个库pickle,可以保存加载几乎所有python数据对象,包括列表。
使用pickle很简单:导入所需模块,使用dump()保存数据,使用load()恢复数据,但要以二进制访问模式打开文件。
import pickle
with open('text.txt','wb') as data0:
pickle.dump([1,2,'three']),data0)
with open('text.txt','rb') as data1:
a_list=pickle.load(data1)
print(a_list)
出错产生PickleError异常。
列表的下标为-1则代表最后一个元素
print BIF的file参数控制数据保存的位置
+可以连接两个字符串
python有两种排序:
原地排序(In-place sorting)指按序排列,然后用排序后的数据替换原数据,原数据丢失。对于列表,sort提供原地排序。
data.sort()
复制排序(Copied sorting)指按序排列,然后返回副本,原数据保留,只是对副本排序,sorted BIF支持复制排序。
data2=sorted(data)
默认的sort与sorted按照升序排列,要实现降序排列则需传入参数reverse=True
列表推导:
减少将一个列表转换为另一个列表时所需编写的代码量:
原代码:
new_list=[]
for each_item in old_list:
new_list.appeng(func(each_item))
使用列表推导:
new_list=[func(each_item) for each_item in old_list]
使用列表分片访问列表中从0到n(不包含n)的数据项:
list[0:n]
python提供了集合数据结构,数据项无序,不允许重复,如果试图向一个集合增加一个数据项,而集合中已经包该数据项,则集合会将其忽略
使用set BIF创建一个空集合,
set0=set()
也可一步完成集合的创建与填充:
set1={item,item,item}
或
set2=set(list)
return(None)返回空
列表数据项的弹出:
(item1,item2)=list.pop(0),list.pop(0)
创建空列表:
dir={}
或dir=dict()
通过将值与键关联,向字典添加数据,每个字典都有一个Name与Occupations列表
dir[‘Name’]=’name’
dir[‘Occupations’]=list
或
dir={‘Name’:’name’,’Occupations’:list}
数据与键关联后,可使用类似列表的方式访问单个数据项:
dir[‘Name’]
dir[‘Occupations’][-1]
字典可以动态的扩展:
dir[‘birth’]=’birth’
python允许创建定义面向对象的类,类可以用来将代码与代码处理的数据相关联。
使用类有助于降低复杂性
使用class定义类:
每个定义的类有一个__init__方法用于初始化对象,类中的方法的定义与函数的定义类似,通过def定义
class name:
def __init__(self):
...
创建对象实例只需对类名的调用赋至各个变量
a=name()
python处理这行代码时,将工厂函数调用转换为如下调用:
name().__init__(a)
目标标识符赋到了self参数,用于明确对象实例,self参数可以帮助标识要处理哪个对象实例的数据。
类中定义的所有方法的第一个参数都是self
class name:
def __int__(self,value=0):
self.thevalue=value
def sizev(self):
return len(self.thevalue)
d=name('value')
d.sizev()
继承:
class name(father):
def __init__(self,a_name):
father.__init__(args)
aelf.a=a_name
dir(实例)查看属性与方法
可将类放入一个模块,导入代码只需:
from 模块名 import 类名