python的文件操作

来源:互联网 发布:壁虎数据恢复破解版 编辑:程序博客网 时间:2024/06/04 08:17

文件操作是程序经常处理的对象,不同的文件有不同的格式,在我们的例子中都看做是二进制文件即可,我们的测试程序仅仅给出关于ascii编码的文件

打开文件方式

文件的打开有多种不同的模式,不同的模式处理不同,获取的文件句柄所能完成的操作也有所不同,包括”读(r)”、”写(w)”、”追加(a)”三种模式,加上一个”b”表示二进制方式,加上一个”+”表示可读写,组合起来有以下几种:
w      以写方式打开,必要时创建文件
a       以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r       以读写模式打开,如果文件不存在将抛出异常
r+     以读写模式打开
w+    以读写模式打开 (参见 w )
a+     以读写模式打开 (参见 a )
rb      以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab      以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+   以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )
python打开一个文件很简单,有以下两种方法:

  • file(name, mode=None, buffering=None),file是一个类,支持迭代
  • open(name[, mode[, buffering]]) -> file object,获取的对象与file相同

文件基本操作

下面来看一个例子,我们

  • 先用’w’的方式打开一个本地磁盘上不存在的文件,写入:”Hello world!”
  • 然后再用’r’的方式打开读入,文件数据并打印
  • 用’a’的方式打开文件,写入”Hello File!”
  • 再次打开文件读入数据并打印

代码实现如下:

__author__ = 'anys'def open_and_write(filename, mode='w', message='Hello World!'):    fp = open(filename, mode)    fp.write(message)    fp.close()def open_and_read(filename, mode='r'):    fp = open(filename, mode)    data = fp.readlines()    print 'read from file:%s,data:%s' % (filename, data)    fp.close()if __name__ == '__main__':    filename = 'test.txt'    open_and_write(filename, 'w', 'Hello World!')    open_and_read(filename, 'r')    open_and_write(filename, 'a', 'Hello File!')    open_and_read(filename, 'r')

运行结果

  • 打印输出
    这里写图片描述
  • 文件数据
    这里写图片描述

更多操作

关于文件的更多操作,可以查看file类获得,看一个例子:

def open_and_other_operate(filename, mode):    fp = open(filename, mode)    print 'tell:%s' % (fp.tell())    print 'iteration of file:%s' % (fp.name,)    i = 1    for line in fp:        print 'line %s:%s' % (i, line)        i += 1    print 'tell:%s' % (fp.tell())    print 'seek to 0'    fp.seek(0)    print 'tell:%s' % (fp.tell())    print 'fileno:%s' % (fp.fileno(),)    print 'truncate'    # only when mode is w or a(for writing)    # fp.truncate(10)    print 'fileno:%s' % (fp.fileno(),)    fp.close()

seek方法有两个参数,方法定义如下:
seek(offset[, whence]) -> None. Move to new file position.
whence是可选参数

  • 默认为None(0),从文件开头算起,此时offset只能为>=0
  • 1,从当前位置开始计算,offset为正,也可以为负
  • 2,从文件尾计算,offset为负

通用换行符
在打开文件的模式中添加”U”以”支持通用换行符”的方式打开文件,所有的行结束符都将当成python的”\n”处理,“U”不能跟”w”、”a”和”+”组合使用,编写代码实现下面的功能:

  • 打开一个文件,写入”Hello World!” + os.linesep(在windows上os.linesep为”\r\n”),在其他系统上可能是”\r”或”\n”;写入”Hello File!”+ os.linesep
  • 以”r”的模式打开读入文件数据
  • 以”rU”模式打开并读入文件数据

测试代码如下:

    filename = 'test.txt'    open_and_write(filename, 'w', 'Hello World!' + os.linesep)    # open_and_read(filename, 'r')    open_and_write(filename, 'a', 'Hello File!' + os.linesep)    open_and_read(filename, 'r')    open_and_read(filename, 'rU')

测试结果如下:

  • 控制台输出,”r”方式读入的文件数据当成两行,行结束符为”\r\n”;”rU”方式读入的文件数据有四行,行结束符全部为”\n”(将”\r”,”\n”全部转换成”\n”),这也告诫我们在写入时换行就使用通用换行符”\n”
    这里写图片描述
  • 文件数据
    这里写图片描述
    我们将上面的例子再做一遍以求证,只是写入的数据行结束符由os.linesep换成”\n”,下面是测试结果:
  • 控制台输出,本次测试结果是两种模式打开读取的数据一致
    这里写图片描述
  • 文件输出,没有多余的空行了
    这里写图片描述

文件的操作还有很多,如果还有更多需要欢迎留言或邮件我,我们一起成长,邮箱:cug_heshun@sina.com

0 0
原创粉丝点击