python学习(4)-文件操作
1、内建函数open
fileobj=open(filename,mode='r',buffering=-1)
mode的取值:
a 输入到文件尾部,如果文件不存在,则创建一个
r 只读方式打开文件,如果文件不存在则引发IOError
r+ 打开文件进行读取和写入,如果文件不存在则引发IOError
w 打开文件进行写入,如果文件存在,则清除其中所有内容;如果文件不存在则创建一个
w+ 打开文件进行读取和写入,如果文件存在,则清除其中所有内容;如果文件不存在则创建一个
ab ,rb,wb,r+b,w+b 打开文件以便进行二进制输入或输出(只有windows和mac平台 才支持此模式)
buffering指明访问文件时使用的数据缓冲方式:0-不缓冲;1-表示缓冲一行数据;任何大于1的数字表示对I/O进行缓冲,缓冲区长度就是给出的数字;缺省-1,对tty串行设备使用行缓冲,对其余设备使用正常缓冲。
如果成功打开文件,就会返回一个文件对象。
2、文件对象的方法
1)close() 关闭文件对象
2)fileno() 返回一个整数的文件描述符
aaa.txt文件内容:
0123456789
0123456789
0123456789
0123456789
0123456789
>>> fname='c:\\aaa.txt'
>>> fp=open(fname,'a')
>>> fp.fileno()
3
3) flush() 刷新文件的内部缓冲区
4) isatty() 如果文件是一个串行类设备就返回True;否则返回False
>>> fp.isatty()
False
5) read([size]) 把整个文件或size个字节长的文件数据读入一个字符串,返回值就是这个字符串
read是从当前文件位置开始读的,所有只有文件指针为0时(文件起始位置),才能读取整个文件。
#没有指定size,读取了整个文件
>>> print fp.read()
0123456789
0123456789
0123456789
0123456789
0123456789
#如果指定size=12,则正好读取12个字节
>>> print fp.read(12)
0123456789
0
6) readline([size])
读取一行包括'\n',当读到文件尾的时候会返回一个空行("")。如果没有指定size读到行尾,指定size则只读取size个字节
#没有指定size,默认读取以一行直到行尾,包括\n
>>> fp.readline()
'0123456789\n'
#指定了size,读取size个字节
>>> fp.readline(8)
'01234567'
#虽然没有指定size,但是从当前文件指针开始读取到了行尾
>>> fp.readline()
'89\n'
#指定了size,超过了一行的字节数,也就只读取一行
>>> fp.readline(13)
'0123456789\n'
7) readlines([size])
读取多行并以字符串列表返回。没有指定size则读到文件尾部,指定size则读取size个字节。
>>> fp.readlines()
['0123456789\n', '0123456789\n', '0123456789\n', '0123456789\n', '0123456789']
# 指定size参数的没有试出来
>>> fp.readlines(1)
['0123456789\n', '0123456789\n', '0123456789\n', '0123456789\n', '0123456789']
>>>
8) tell() 返回文件指针当前位置
9) seek(offset,[location])
在文件中移动offset个字节,默认从文件起始处开始移动,如果指定location则从指定位置开始移动。
location(0=文件头SEEK_SET;1=当前位置SEEK_CUR;2=文件尾SEEK_END)
>>> fp.tell()
58L
>>> fp.seek(0) #移动到文件起始位置
>>> fp.tell()
0L
10) truncate([size])
把文件截短为size个字节,size默认是当前文件指针位置,也就是tell()返回的位置
>>> fp.truncate(4)
>>> fp.read()
'0123'
11) write(str) 把str写到文件中
(如果write后不进行flush,close或者seek,直接read,那么写的文件就会 出现大量的无用数据,怀疑是把缓冲区里的内容写到文件中去了,这个不会是bug吧)
12) writelines(strlist) 把字符串列表写到文件中去
13) xreadlines() 不知道怎么用
14) next() 试着用了下,好像也是读一行,不知道和readline的区别是什么
3.文件属性
1)closed 文件被关闭为true,否则false
2)mode 文件的打开方式
3)name 文件名
4)softspace 0表示需要在print语句里明确地加上空格;否则为1
---------
有待研究
5)newlines
6)encoding