python对文件的操作

创建与打开

对文件的读写操作

对文件的复制,删除,重命名等操作

举例说明

python打开一个文件可以用open或file

>>> fo=open('./12.txt')

>>> fo.read()

'abc\nthis is \nthis is add\nthisddd is add\nthisdddddddffggd is add\n'

>>> fo

<open file './12.txt', mode 'r' at 0xb77a5e90>

>>> fo.close()

向文件中写入数据的模式

r 只读

r+ 读写

w 写入,先删除原来的文件,在重新写入,如果文件没有则创建文件

w+ 读写,先删除原来的文件,在重新写入,如果没有则创建(可以写入输出)

a 写入,在文件末尾追加新的内容,文件不存在,则创建

a+ 读写,在文件末尾追加新的内容,文件不存在,则创建

b 打开二进制的文件,可以与r,w,a,+ 结合使用

U 支持所有的换行符。

例子

>>> fnew=open('./11.txt','w')

>>> fnew.write('hello,world.\nthis is a test file')

>>> fnew=open('./11.txt')

>>> fnew.read()

'hello,world.\nthis is a test file'

>>> fnew.close()

>>> fnew=open('./11.txt')

>>> fnew.close()

>>> fnew=open('./11.txt')    

>>> fnew.read()

''

r+读写

>>> fnew=open('./12.txt','r+')

>>> fnew.read()

'abc\nthis is \nthis is add\nthisddd is add\nthisdddddddffggd is add\n'

>>> fnew.write("harry is a boy")

>>> fnew.close()

>>> fnew=open('./12.txt','r+')  

>>> fnew.close()        

>>> fnew=open('./12.txt','r')

>>> fnew.read()

'abc\nthis is \nthis is add\nthisddd is add\nthisdddddddffggd is add\nharry is a boy'

文件里面有一个隐形的指针,当我们读取文件时隐形指针,从头移动到尾,指针正好在尾部,所以添加到末尾,当我们没有读取,指针在开头,我们写入时是从指针位置写入,所以会替换前面的内容

看如下例子:

>>> fenw=open('./12.txt','r+')

>>> fenw.write('DOT')

>>> fenw.close()

>>> fenw=open('./12.txt')    

>>> fenw.read()

'DOT\nthisddd is add\nharry is a boy\n'

由此可以发现我们写入的数据并没有追加到后面,而是替换了前面的数据

用迭代方法读取文件

>>> f1=open('./12.txt')

>>> s1=f1.read()

>>> s1

'DOT\nthisddd is add\nharry is a boy\n'

>>> f1.close()

>>> for i in open('./12.txt'):

...     print i

...

DOT

thisddd is add

harry is a boy

文件对象方法

readline:

string=FileObject.readline([size])

说明:每次读取文件的 一行

   size是指每行每次读取size个字节,直到行的末尾

例子:

>>> fnew=open('./12.txt','r')

>>> fnew.readline()

'DOT\n'

>>> fnew.readline()

'thisddd is add\n'

>>> fnew.readline()

'harry is a boy\n'

>>> fnew.readline()

''

>>> fnew.readline()

''

readlines 是把每一行当做列表的一个元素,所有的行返回一个列表,这样可以把列表迭代

例子

>>> fnew=open('./12.txt','r')

>>> fnew.readlines()        

['DOT\n', 'thisddd is add\n', 'harry is a boy\n']

next:

格式:FileObject.next()

说明:返回当前行,并将指针指导下一行

next类似,readline但是readline读取到文件末尾后,会无限读取空字符串,next独到结尾会提示迭代终止

>>> fnew=open('./12.txt','r')

>>> fnew.next()              

'DOT\n'

>>> fnew.next()

'thisddd is add\n'

>>> fnew.next()

'harry is a boy\n'

>>> fnew.next()

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

StopIteration

writelines

格式:

FileObject.writelines(List)

说明:

多行写

效率比write高,速度更快,少量写入可以使用write

例子:

>>> L=['one\n','two\n','three\n']

>>> f1=open('./12.txt','a')

>>> f1.writelines(L)

>>> f1.close()

>>> f1=open('./12.txt')

>>> f1.read()

'DOT\nthisddd is add\nharry is a boy\none\ntwo\nthree\n'

FileObject.seek(偏移量,选项)

选项=0是,表示将文件指针指向从文件头部到“偏移量”字节处。

选项=1时,表示将文件直指向从文件当前位置,向后移动“偏移量”字节处

选项=2时,表示将文件指针指向从文件的尾部,向前移动“偏移量”字节。

注:提交更新,平时我们写入数据后必须关闭文件才能看到写入的数据,我们用flush进行提交更新这样,不用关闭就可以看到数据。

>>> f1=open('./12.txt','a')

>>> l=['a','b']

>>> f1.writelines(l)

>>> f1.flush

<built-in method flush of file object at 0xb77a5c28>

>>> f1=open('./12.txt')    

>>> f1.read()

'DOT\nthisddd is add\nharry is a boy\none\ntwo\nthree\n'