python的文件操作

文件操作是程序经常处理的对象,不同的文件有不同的格式,在我们的例子中都看做是二进制文件即可,我们的测试程序仅仅给出关于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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值