zoukankan      html  css  js  c++  java
  • python IO文件处理

    python的文件读写操作符有:
    r

    w

    a

    r+

    w+

    rb

    wb

    除了以file的方式打开文件,还有一种方式就是open了,两个的用法是一模一样的,可以看成open就是file的别名

    下面这个表格是转自:http://blog.csdn.net/cnmilan/article/details/9142561

    w

    以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容

    a

    以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建,可以追加文件内容,但是只可以写,不可以读

    r+

    以读写方式打开文件,可对文件进行读和写操作。下次再执行r+的时候,文件会从指针0位置开始写,写操作是默认从0位置开始写的。要是想从文件末尾追加可以使用a

    w+

    消除文件内容,然后以读写方式打开文件。

    a+

    以读写方式打开文件,并把文件指针移到文件尾。(要是文件不存在,就创建这个文件),可读可写

    b

    以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

    操作文件对象方法

    f.close()

    关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。

    f.fileno()

    获得文件描述符,是一个数字

    f.flush()

    刷新输出缓存

    f.isatty()

    如果文件是一个交互终端,则返回True,否则返回False。

    f.read([count])

    读出文件,如果有count,则读出count个字节。一下把整个文件的读出来,整个文件以字符串的形式显示出来,当我们执行完f.read()之后再执行f.read()会发现没有内容展现出来,那是因为我们读取文件之后,文件指针跑到末尾了,要是想重新能够读取内容,可以执行f.seek(0),把文件指针放到起始位置

    f.readline()

    读出一行信息。(文件内容一行一行显示出来)

    f.readlines()

    读出所有行,也就是读出整个文件的信息(先把文件读到内存里,所有内容以一个列表的形式展示出来)

    f.seek(offset[,where])

    把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。

    f.tell()

    获得文件指针位置

    f.truncate([size])

    截取文件,使文件的大小为size。

    f.write(string)

    把string字符串写入文件。

    f.writelines(list)

    把list中的字符串一行一行地写入文件,是连续写入文件,没有换行(以列表的性形式写进去内容)


    还有一个f.xreadlines()   相当于迭代器,循环一次读一行内容,一行一行的往内存里面读,读完一行之后扔一行,然后读取下一行,非常省内存

    现在看一下下面几个循环

    >>> for line in f.readlines():
    ...     print line,
    ...
    ppppp
    haha
    gogogo
    kkkkkkkkkkkkbbbb
    aaaa

    >>> f.close()
    >>> f = file('test.txt','r')
    >>> for line in f.readlines():
    ...     print line
    ...
    ppppp

    haha

    gogogo

    kkkkkkkkkkkkbbbb

    aaaa
    我们可以看到上面在执行print的时候两者的区别是,要是没有加逗号","的话,文件输出的时候会换行所以为了好看我们在print的时候加上一个逗号”,“

    >>> f = file('test.txt','r')
    >>> for line in f.readline():
    ...     print line,
    ...
    p p p p p  

    我们在看一下f.xreadlines()

    >>> f.close()
    >>> f = file('test.txt','r')
    >>> for line in f.xreadlines():
    ...     print line,
    ...
    ppppp
    haha
    gogogo
    kkkkkkkkkkkkbbbb
    aaaa

    我们肉眼看到好像f.readline 和f.xreadlines没有什么区别,但是当我们循环一个大文件的时候我们就会看到xreadlines()的性能会比readline好很多

    还有一种循环就是

    >>> f.close()
    >>> f = file('test.txt','r')
    >>> while True:
    ...     line = f.readline()
    ...     print line,
    ...     if not line:break
    ...
    ppppp
    haha
    gogogo
    kkkkkkkkkkkkbbbb
    aaaa

    这个性能更低,没读取一次的时候就要执行一个判断语句

    例1:从文本文件中每读取一行文本便输出

    我们现在来看一下下面的实例:

    [root@git 628]# pwd
    /root/python/python_day_practice/628

    >>> f = file('test.txt','w')
    >>> f.write('this is a good day!')

    在终端输入上面代码,这种情况下,我们到628目录下看看有没有我们写的这个文件test.txt,我们发现是有的,但是文件里面没有内容。原因是我们写完之后没有保存,文件内容还在内存中,没写到硬盘上

    这时候我们执行

    >>> f.close()

    我们就能看到文件test.txt文件下有内容了

    我们要是想读取文件的不同行的内容的操作方法有

    >>> f = file('test.txt','r')
    >>> b = f.readlines()
    >>> b[1]
    'haha '
    >>> b[2]
    'gogogo '
    >>>

    还有一种方法就是先读取全部的内容,然后以       这个字符为准,然后切片

    >>> f = file('test.txt','r')
    >>> c = f.readline()
    >>> c.split(' ')[0]
    'ppppp '

    文件内容的替换()

    下面还要说一种python 中的fileinput模块

    >>> import fileinput(要是批量修改文件的话可以使用这个方法)

    >>> for line in fileinput.input('test.txt',inplace=1):
    ...   line = line.replace('go','break')
    ...   print line,
    ...

    把文件中的"go"换成”break“,注意这里要print 一下,不然文件中的内容不发生变化
    >>> for line in fileinput.input('test.txt',inplace=1,backup='.bak'):
    ...   line = line.replace('back','go')
    ...   print line,
    ...

    这里加了一个backup的意思就是说把原有的文件给备份一下,防止出错

    假如说我们用file 或者 open的方式打开文件或者写入内容的时候。我们需要执行。f.close()关闭文件,把内容从内存中释放的硬盘中

    但是现在有一种方法不需要执行f.close(),那就是with  ......   as

    python 中with的作用就是自动的释放对象,

    >>> with open('test7.txt','r') as f:
    ...     for i in f.xreadlines():
    ...         print i
    ...
    123

    345

    456

    677

    577

    还有一点要注意的是,我们网文件里面写内容的时候,要注意我们只能写字符串类型的,所以这里要注意了,当我们想向文件里面写数字是不行的,这里我们就得转换一下字符类型

    我们可以使用str 或者是  join的方式转换,具体实例参照如下:

    >>> a = 4
    >>> type(a)
    <type 'int'>
    >>> type(str(a))
    <type 'str'>

    现在我们来说一下,join和split的用法

    join是用来连接字符串的,刚好split的用法刚好相反,他是用来拆分字符串的

    >>> a = ['1','2','3']
    >>> a[1]
    '2'
    >>> type(a[1])
    <type 'str'>
    >>> ''.join(a)
    '123'
    >>> '*'.join(a)
    '1*2*3'
    >>>

    现在我们来看一下split的用法

    >>> b = 'my**name**is**haha'

    >>> b.split("**",1)
    ['my', 'name**is**haha']
    >>> b.split("**",4)
    ['my', 'name', 'is', 'haha']
    >>> b.split("**")
    ['my', 'name', 'is', 'haha']
    >>> b.split("**",2)
    ['my', 'name', 'is**haha']

  • 相关阅读:
    程序的跨平台性:除了能够运行,还必须保证运行的结果。
    任务并发执行是一个宏观概念,微观上是串行的。
    Swing与AWT在事件模型处理上是一致的。
    我们在学习JDBC的时候会过度到J2EE。
    AWT是Java最早出现的图形界面,但很快就被Swing所取代。
    在生成一个窗体的时候,点击窗体的右上角关闭按钮激发窗体事件的方法:窗体Frame为事件源,WindowsListener接口调用Windowsclosing()。
    在java.util中有EventListener接口:所有事件监听者都要实现这个接口。
    事件模型指的是对象之间进行通信的设计模式。
    经验之谈:Swing的开发工作会非常的累,而且这项技术正在走向没落。避免从事有这种特征的工作。
    重点掌握集合的四种操作:增加、删除、遍历、排序。
  • 原文地址:https://www.cnblogs.com/smail-bao/p/5622691.html
Copyright © 2011-2022 走看看