python文件处理

来源:互联网 发布:那个网站注册域名便宜 编辑:程序博客网 时间:2024/04/28 21:35
file object的属性:
closed #标记文件是否已经关闭,由close()改写
encoding  #文件编码
mode  #打开模式
name  #文件名
newlines #文件中用到的换行模式,是一个tuple
softspace  #这是一个布尔值在使用 print 语句时表示在打印另一个值之前,是否要先打印一个  空白符。若用类来模仿文件操作则必须提供这样一个可写的属性,并将其初始化为0
file所有的方法:
  • file()函数用于创建一个file对象,它有一个别名叫open()file( filename[, mode[, bufsize]])
  • close()
在Python2.5中,如果使用with语句则可以避免显示调用close()方法
from __future__ import with_statement
 
with open("hello.txt") as f:
    for line in f:
        print line
当一个错误发生时,在整个块退出时都会自动调用close()方法.
旧版本中的Python应该写成如下形式:
f = open("hello.txt")
try:
    for line in f:
        print line
finally:
    f.close()
 
调用其它一些类文件(file-like)的类型时,可以使用closing()方法:
例:
通常地写法是这样的:
from contextlib import contextmanager
@contextmanager
def closing(thing):
    try:
        yield thing
    finally:
        thing.close()
 
换用closing()方法则会这样:
from __future__ import with_statement
from contextlib import closing
import urllib
 
with closing(urllib.urlopen('http://www.python.org')) as page:
    for line in page:
        print line
 flush()把缓冲区的内容写入硬盘
  • fileno()   返回一个长整型的”文件标签“
  • isatty() :当这个文件是与一个tty(-like)设备相联则返回true(UNIX系统)
  • next():
一个文件对象就是自己的iterator,例如iter(f)返回的就是f(除非f 是关闭状态的)。当一个文件被当成一个迭代器使用时,代表性的使用方法就是用在for循环中(例如:for line in f:print line),next()方法被重复地调用。这个方法返回下一待读入的行,或者抛出StopIteration当读到了文件尾(EOF)[当一个文件被打开并在被写入时这个行为是未定义的]
为了使for循环能最高效地遍历整个文件的行,next()方法使用一个隐藏的read-ahead buffer。
注意的问题,因为它使用读先行缓冲区,因为,如果把next()方法同其它文件操作方法(像readline())一起使用将会不能正常工作。虽然如此,使用seek()方法重定位文件到一个确定的位置将会刷新整个read-ahead buffer.
  • read[size]  读到EOF时返回一个空串
  • readline([size])
  • readlines([size])
  • xreadlines()  这个方法返回的结果跟 iter(f)一样。 现在己经基本被 for line in file 代替
 for line in f.xreadlines():     # Do something with line        ...
 
seek(offset[,whence])
tell()
 
  •       truncate([size])  把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
 
  •       write(str)
  • writelines(sequence)  把一个序列的strings写入到文件中。这个sequence可以是任何iterable object producing strings,较为典型的是一个字符串列表(list of strings),没有返回值。其实不添加换行符,只是名称为了跟readlines()对应
  • writelines() does not add line separators