zoukankan      html  css  js  c++  java
  • python(1) -文件操作

    很多时候我们需要对文件进行一些操作,比如读取并分析日志文件,写入日志文件等等。显然python也内置了对文件进行操作的函数。

    读文件:

    >>> f = open('a.log','r')

    这样就打开了一个文件,’r’表示读。当然 还有其它打开方式:

    ‘w’ :表示写入,如果文件不存在,则创建,如果存在则覆盖

    ‘a’  :表示追加

    >>> f.read()
    '2015-12-14 15:34:57  ‘
    >>> file = f.read()
    >>> type(file)
    <class 'str'>

    read()方法可以一次读取全部文件内容,可以看出读取后返回一个字符串

    >>>f.close()

    文件操作完成之后,我们用close()方法关闭文件;记住使用完成之后必须关闭文件,因为文件对象占用操作系统的资源,并且操作系统同一时间打开的文件数量是有限的。

    那这样每次都得关闭,会不会很麻烦,如果总是忘了关怎么办? 其实不必担心,因为python引入with语句帮我们自动关闭文件:

    >>> with open('a.log','r') as f:
    ...     f.read()
    ...
    '2015-12-14 15:34:57       sucessful

    这样就不必担心忘记关闭文件了。

    read()方法一次读取所有内容,如果你的文件有十几个G,那你的内存不就装不下了吗? 所以我们可以用read(size)方法,每次读取size字节的内容。

    我们还可以使用readline()readlines()方法,

    readline()   一次只读取一行

    readlines() 一次加载所有内容到内存,然后按行返回

    具体怎么用,问问内存兄。。

    写文件:

    >>> f = open('a.log','w')
    >>> f.write('Good day!')
    9
    >>> f.close()

    w是创建一个新文件,如果文件不存在,则创建,如果文件存在就会覆盖,所以千万要注意,别把有用的文件给覆盖了。

    下面打开文件看一下,原来的内容还在吗?

    >>> f.close()
    >>> f = open('a.log','r')
    >>> f.read()
    'Good day!'

    oh,原来的内容已经不在了,只有刚刚写入的内容!!

    那我就是想往文件里继续写内容,怎么办呢?

    >>> f.close()
    >>> f = open('a.log','a')
    >>> f.write('Good day too!')
    13

    打开文件看看

    >>> f = open('a.log','r')
    >>> f.read()
    'Good day!Good day too!'
    >>>

    已经追加进去,但是都写在了一行,如果想另起一行的话,写入个’ ’就好了。

    除了r,w,a之个,还有以下几种:

    r+  :  以读写模式打开,其实跟追加的效果是一样的,能读能写

    w+ :  以写读模式打开,还是会覆盖源文件

    a+ :  以追加和读的模式打开

    rb,wb,ab : 以二进制模式打开并处理文件,如果是非文本文件就应该用二进制模式打开,其实不加b,file也能处理二进制文件,但是涉及到跨平台时就可能有问题了,因为linux和windows的换行 标志位是不一样的,linux是’ ’,windows是’ ’,所以还是加上b吧。

    文件其它方法:

    f.mode      显示文件打开格式

    f.flush()     把缓冲区中的数据刷到硬盘,当你往文件里写数据时,python会先把内容写入到内存缓冲区,等缓冲区满了再统一自动写入硬盘

    f.read()     把文件一次性读入内存,文件太大时不适用

    f.readline()   一次读一行内容

    f.readlines()    把文件全部读入内存,并将每行转换成列表的一个元素,同样大文件时不适用

    f.tell()     显示程序光标在文件中的当前位置

    f.seek()    跳到指定位置,f.seek(0) 是返回文件开始

    f.truncate()     f.truncate(10) 从文件开头截取10个字符,超出的都删除,注意文件需要用写模式打开

    >>> f = open('test.txt','r+')
    >>> f.truncate(7)
    7
    >>> f.read()
    'abcdefg'

    f.writelines()   参数需要是一个列表,将一个列表中的每个元素都写入文件

    >>> list = ['abcdefg','123456','!@#$%']
    >>> f = open('test.txt','w')
    >>> f.writelines(list)
    >>> f.close()
    >>> f = open('test.txt','r')
    >>> f.read()
    'abcdefg123456!@#$%'

    f.xreadlines()   以迭代的形式循环文件,在处理大文件时效率极高,只记录文件开头和结尾,每循环一次只读一行

  • 相关阅读:
    贝塞尔曲线
    行为树
    Astar寻路算法
    vuex入门
    关于用户留存率的计算的几个层次-费元星
    linux命令执行返回值(附错误对照表)费元星
    rabbitmqadmin安装与使用
    分布式锁服务 分布式协调系统
    记录一次使用react异步不更新数据的问题
    从0到1搭建前端异常监控系统(Vue + Webpack + Node.js + Egg.js + Jest)
  • 原文地址:https://www.cnblogs.com/huangxm/p/5143794.html
Copyright © 2011-2022 走看看