python:8:文件的输入与输出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/78648128

第一章:python

第八节:文件的输入与输出

1,文件的读写形式

文件使用模式’r’,’w’及’a’分别表示文件的读取,写入和追加;而’r+’表示以读方式打开。

文件的输入(文件内容读取):

read():将文件中的所有内容看成一个字符串,并将其读取出来,包括换行符,制表符等,这些字符都算在这一个字符串当中;
readline():以行为单位读取文件内容,每次输入readline()读取文件的一行,当所有内容读取完毕后,再次输入则为空字符串,输出每行时包括结尾的换行符;
readlines():读取文件的所有行,并以每行内容(包括换行符)作为一个字符串,所有行的内容作为一个列表生成。
例子:
read()
>>> f=open('yes.py','r')
>>> f.read()
"#!/usr/bin/env python\nprint 'yes'\n"
readline()
>>> f=open('yes.py','r')
>>> f.readline()
"#!/usr/bin/env python\n"
>>> f.readline()
"print 'yes'\n"
readlines()
>>> f=open('yes.py','r')
>>> f.readlines()
['#!/usr/bin/env python\n'], ["print 'yes'\n"]

文件的输出(写内容到文件中):

写入文件的操作不存在writeline()
write():可写入字符串,但不能写入列表;
>>> wr=open('name.txt', 'w')
>>> s='234'
>>> wr.write(s) #写入字符串
>>> wr.close()
>>> wr=open('name.txt', 'w')
>>> ls=['1', '2', '3']
>>> wr.write(ls)
TypeError : expected a string or other character buffer boject
所以write()不能写入一个列表
如果列表想写入文件,需要利用for循环,将列表中的每个元素提取出,之后分别写入文件中。例如:
>>> wr=open('name.txt', 'w')
>>> ls=['1', '2', '3']
>>> for a in ls:
... ····wr.write(a)
>>> wr.close()
但写入name.txt文件中的形式是123,理想的形式是1,2,3每行写入一个字符串,所以write()这个函数在写入文件内容时,不负责写入换行符;需要人为加入换行符。
>>> wr=open('name.txt', 'w')
>>> ls=['1', '2', '3']
>>> for a in ls:
... ····wr.write('%s\n'%a)
>>> wr.close()
写入name.txt的文件形式是1,2,3每个字符串后面有换行符。
writelines():可写入列表,也可以写入只含有一个字符的列表,但不能写入字符串;
>>> wr=open('name.txt', 'w')
>>> ls=['1', '2', '3']
>>> wr.writelines(ls)
>>> wr.close()
写入name.txt文件中的形式依然是123,而理想的形式是1,2,3每行写入一个字符串,所以writelines()在将列表写入文件时,是将列表中的元素当成字符串,依次写入的,如果字符串当中不存在末尾的换行符’\n’,则写入文件的内容不会换行。如果想通过writelines()将列表中的各个元素换行写入文件中,可利用for循环改变列表元素的形式,再将列表写入文件当中。
>>> wr=open('name.txt', 'w')
>>> ls=['1', '2', '3']
>>> ll=[]
>>> for a in ls:
... ····ll.append('%s\n'%a)
>>> wr.writelines(ll)
>>> wr.close()

文件迭代器

next()函数,在不需要迭代器iter()的条件下同样可以执行迭代器效果;
>>> f=open('yes.py','r')
>>> f.next()
"#!/usr/bin/env python\n"
>>> f.next()
"print 'yes'\n"
>>> f.next()
StopIteration
所以next()函数需要和try函数协调使用

文件对象方法

file.flush()刷新文件的内部缓冲区;
一般在执行file.close()后,才可查看文件的写入内容,但如果输入file.flush(),可在执行file.close()之前,看到文件的写入内容。
file.seek(off, whence=0)
在文件中移动文件指针,从whence(0代表文件起始,1代表当前位置,2代表文件末尾)偏移off个字节
FileObject.seek(偏移量,选项)
当whence=0时,表示将文件指针指向从文件头部到“偏移量”字节处;
当whence=1时,表示将文件指针指向从文件的当前位置向后移动“偏移量”字节;
当whence=2时,表示将文件指针指向从文件尾部向前移动“偏移量”字节;
>>> f.seek(0, 0) #文件指针回到文件头部
>>> f.seek(0, 2) #文件指针回到文件尾部
>>> file.tell() #显示文件指针当前位置

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/78648128