加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python文件读取(大文件的倒序读取)

(2011-04-07 11:51:03)
标签:

python文件读取

it

1、内建函数open
fileobj=open(filename,mode='r',buffering=-1)
mode的取值:
a      输入到文件尾部,如果文件不存在,则创建一个
r      只读方式打开文件,如果文件不存在则引发IOError
r+     打开文件进行读取和写入,如果文件不存在则引发IOError
     打开文件进行写入,如果文件存在,则清除其中所有内容;如果文件不存在则创建一个
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

f1 = file(r"XXXXX\date.txt")
d = [f1.tell()]
line_date = f1.readline()
while line_date:
    d.append(f1.tell())
    line_date = f1.readline()
   

d.reverse()

for i in d[1:]:   <--第一个为空行.可以忽略
    f1.seek(i)  <---定位到某一行
    reverse_data = f1.readline()
    print repr(reverse_data)

f1.close()

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有