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

    1.创建文件

    >>> file('test.txt','w')   -->在当前路径下创建文件

    test.txt是文件名

    w是打开文件的方式,r是读,w是写,a是追加,如果当前路径没有这个文件,用w可以直接创建

    2.往文件中写内容

    >>> file('test.txt','w').write('hello')  #如果是以'w'模式打开的,那么会重新写这个test.txt文件,原来的内容不再有。

    正确的写法:

    >>> f = file('test.txt','w')

    >>> f.write('hello ')    # 是换行

    >>> f.write('hello2')  #现在写的数据还在内存里边,没有写到硬盘上,此时查看文件是空的,即便原来有数据。

    >>> f.close() #把文件关掉就写到硬盘上了,只要是用w模式打开的写数据,就会覆盖掉以前的数据,产生一个新文件

    3.读文件

    如果是以w模式打开文件的,写完数据之后不想关闭文件,但是还想看到文件中的内容,用flush(),但是这样会报错,因为你用的是w模式打开的,所以没法读取,在这儿只是想引进flus()的使用方法

    不写打开文件模式,默认是以r来打开文件的

    >>> f = file('test.txt')
    >>> f.read()   #read()方法读取出来的是字符串,全部读取出来
    'hellohello '

    >>> f.readline()   #这个是读取文件一行的方法,在这儿为什么会是空的呢?因为在刚打开文件时,我们用f.read()读取了一次,相当于从内存中把这个字符串全部读取了出来,
    ''             #这时候指针就移到了字符串的后边,那同时也就没有了内容。

    可以通过这个来验证以上内容是否正确

    >>> f = file('test.txt')   #关闭文件后重新打开
    >>> f.tell()        #查看文件内容在内存指针的位置
    0             #结果是0,也就是没读取文件之前指针在最前边
    >>> f.readline()    #读取test.txt中的一行
    'hello '        #显示结果以字符串的形式出现
    >>> f.readline()
    'hello '        #test.txt总共写了两行hello
    >>> f.readline()    #在读取的时候就没有内容了,因为第三行没有内容,所以显示空
    ''
    >>> f.tell()      #再次调用查看指针在内存中的位置
    12
    >>>

    >>>f.seek(0)      #将指针移到0位置上,就可以重新读取内容了

    >>> f.tell()

    >>> f.seek(0)

    >>> f.readines() #以列表的方式读取出来,然后可以精确的拿出第几行,但是是读到内存中去的,占用内存空间,文件太大的时候会卡

    f.xreadlines() #是读取文件所有行的迭代器,如果一个G的日志文件,用这种方法比直接用readline()要快,因为readline()这个方法是先读到内存在打印,所以在打印1G的日志文件时会先等一会儿才会打印,而xreadline()会直接打印,内存中读一行然后扔一行

    4.遍历文件,两种遍历方法。

    #!/usr/bin/env python
    f = file('auth.log')
    for line in f.xreadlines():
        print line,

    #!/usr/bin/env python
    while True:
         line = f.readline()
         print line,
         if not line:break

    5.读取文件的模式

    如果文件以读写模式打开('r+'),那么写的时候是根据指针的位置来覆盖文件的,如果先读了一行,在往文件写的时候,会覆盖第二行的字符,而不是整个第二行!

    ('rb')可以处理二进制文件。如果windows过来的python文件,在linux上处理的时候用这个二进制文件处理。换平台的时候有时候会报错。

    6.文件内容替换,批量更改文件

    for line in fileinput.input("filepath",inplace=1):   #inplace=1 表示文件里的内容也同时改掉,如果是0的话,文件里的内容不会改掉,只是会打印出来。

        line = line.replace("oldtext","newtext")

        print line,   #必须print,没有print更改失败!

    backup=''  #修改文件之前做备份,只需要加个后缀即可

    #!/usr/bin/env python
    import fileinput
    for line in fileinput.input("test.txt",inplace=1,backup='.bak'):
    line = line.replace("hello2222","hello2")
    print line,

    备份的文件没有被修改,test.txt.bak就是备份的文件

    7.存放不同类型的文件到同一个文件中,以二进制存储

    #!/use/bin/env python

    improt struct

    n=1600    整数类型

    x=92.60   浮点型

    b=True    bool型

    s='!@中国'   字符串型

    sn=struct.pack('if?',n,x,b)   将不同类型转换成二进制方法

    f=open('erjinzhi.dat','wb')

    f.write(sn)

    f.write(s)

    f.close

  • 相关阅读:
    数据结构-树与二叉树-思维导图
    The last packet successfully received from the server was 2,272 milliseconds ago. The last packet sent successfully to the server was 2,258 milliseconds ago.
    idea连接mysql报错Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property
    redis学习笔记
    AJAX校验注册用户名是否存在
    AJAX学习笔记
    JSON学习笔记
    JQuery基础知识学习笔记
    Filter、Listener学习笔记
    三层架构学习笔记
  • 原文地址:https://www.cnblogs.com/i1991/p/6322406.html
Copyright © 2011-2022 走看看