1、文件处理:
Python处理文件的流程比较简单,大致分为以下几个:
打开文件==》处理文件==》生成新文件==》写入文件
先说怎么打开一个文件:
打开一个文件可以有多种写法,下面咱一个一个的看其中的异同点:
<1>,使用file打开一个文件和使用open打开一个文件,理论上是没啥区别的,就看个人的习惯,不过在Python3之后,貌似不能使用file去打开一个文件了,在Python2中则都可以使用,下面看这句代码:
f1 = open('a.txt','r');
先说下括号中的意思:第一个是要打开的文件名称,第二个参数表示的是以只读的方式打开a.txt文件,第二个参数还可以写成其它的形式(比如:w,只写的方式打开;r+,可读可写;w+,写入文件之前,先清空文件等等)
以这种方式打开的文件,必须执行f1.close(),来关闭文件,不然资源就无法释放,只有等到垃圾回收机制来回收,但是这个时间是不固定的,也是不可控制的;
下面看一个示例:
1 f1 = open('test','r') 2 for line in f1: 3 print(line) 4 f1.close() 5 #运行结果就是 6 one line 7 8 two line 9 10 three line
解释:先看第一行,就是以只读的方式打开test文件,然后使用for循环对文件中的行进行遍历,这里在in后面也有几种写法,分别是
f1.read():调用这个方法的意思是读取每个字符,都当做一行来进行输出。
f1.readline():把第一行的每个字符当做一行来进行输出
f1.readlines():遍历每一行,并输出,其实它跟直接写对象文件,显示的效果都是一样的,但还是推荐后者,效率更高一些。
<2>,还有一种打开文件的方式,这种方式不需要执行close()方法:
with open('test','r') as f1:
以这种方法打开的文件,不需要执行f1.close(),就会自动关闭。
<3>,下面通过一个实例,来具体的说明下该怎么样操作文件:
1 #主执行程序 2 f1 = open('test','r+') 3 for line in f1: 4 print(line) 5 new_line = 'three line' 6 f1.write(' '+new_line) 7 f1.close() 8 #存放文件test 9 one line 10 two line 11 12 #当执行第一遍是,显示的结果是 13 one line 14 two line 15 #当执行第二遍时,显示的结果是 16 one line 17 two line 18 three line
#从这个例子,你可以初步了解,该怎么去读取,写入一些内容
二、下面看一下装饰器(不过就心而论,我对装饰器的理解还是很片面的,在这里,只想分享下我的理解)
装饰器的作用是在操作一个函数前和后面执行一些操作;不多说,先看个例子,然后我们针对这个例子,来进行简单的说明:
1 #test.py文件 2 def outer(func): 3 def inner(*args,**kwargs): 4 print('before') 5 r = func(*args,**kwargs) 6 print('after') 7 return r 8 return inner 9 10 @outer 11 def f1(args): 12 print(args) 13 return 'kankan' 14 15 @outer 16 def f2(a1,a2): 17 print(a1,a2) 18 19 #func_dy.py调用文件,也是执行文件 20 import test 21 22 ret = test.f1('canshu') 23 print(ret)
说明:
func_dy.py是执行文件,通过导入test模块(其实就是刚才建的test.py文件)里的f1函数,并传递给一个值,然后打印输出。
test.py文件是被调用文件,它里面才真实的做了装饰器的模型,@函数名 就是装饰函数用的,其实在你调用f1函数的时候,在test.py内部,是把f1函数传递给func,也可以把inner函数跟f1函数画上等号。
在执行过程中,显示输出before,然后输出在func_dy.py中传递的参数'canshu'的值,然后输出after,最后,会调用f1函数的return方法,返回kankan,这其中的调用比较复杂,在这里很难把详细的调用过程说的很明白,以后如果有这相关更多的实例,再呈现给大家,下面是输出的结果:
1 before 2 canshu 3 after 4 kankan