zoukankan      html  css  js  c++  java
  • python的文件操作

    一、file读文件

      读写文件是最常见的IO操作。Python内置了读写文件的函数。在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

      读文件需要三个步骤:

      1.要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符。标示符'r'表示读。如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在

      2.如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示

      3.最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

      程序代码如下:

    import codecs
    
    f = codecs.open('1.txt','r')
    print (f.read())
    f.close()

      注:codecs模块:主要用来解决文件乱码的问题

      程序运行结果:

      读取文件后,对文件进行操作,程序代码如下:

    import codecs
    
    f = codecs.open('1.txt')
    text = f.read()
    print(type(text))
    result = text.replace('1','A')
    print (result)
    f.close()

      程序运行结果如下:

    二、file写文件

      写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件。可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。程序代码如下:

      

    import codecs
    
    f = codecs.open('2.txt','wb')
    f.write('hello world
    ')
    f.write('gggdgdsd
    ')
    f.write('huangdongju
    ')
    f.write('hello {0}
    '.format('momo'))
    f.write('hello %s
    '%'huangodngju')
    f.close()

      程序运行结果如下:

      

    三、file常用的方法

      1.readlines():用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。如果碰到结束符 EOF 则返回空字符串。返回list,每一行作为list的单个元素。程序代码如下:

      

    import codecs
    f = codecs.open('2.txt','rb')
    text_list = f.readlines()
    print (type(text_list))
    print(text_list)
    print (text_list[0])
    f.close()

      程序运行结果如下:

      2.readline():用于从文件读取整行,包括 " " 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 " " 字符。

         next():返回迭代器的下一个项目

       程序代码如下:

    import codecs
    f = codecs.open('2.txt','rb')
    print (f.readline())
    print (f.next())
    f.close()

      程序运行结果:

      

      3.write():用于向文件中写入指定字符串。

       writelines():用于向文件中写入一序列的字符串。

      程序代码如下:

    import codecs
    f = codecs.open('3.txt','wb')
    f.write('huangdongju
    momo
    11111
    ')
    f.writelines(['aaaaa
    ','bbbbb
    ','ccccc
    '])
    f.close()

      程序运行结果:

      4.tell():tell() 方法返回文件的当前位置,即文件指针当前位置。程序代码如下:

    import codecs
    file = codecs.open('4.txt','wb')
    file.write('helloworld!
    huangdongju
    ')
    print(file.tell())
    file.writelines(['aaaaa
    ','bbbbb
    ','ccccc
    '])
    print (file.tell())
    file.close()

      程序运行结果如下:

      5.seek():seek() 方法用于移动文件读取指针到指定位置。程序代码如下:

    import codecs
    file = codecs.open('4.txt','wb')
    file.write('helloworld!
    huangdongju
    ')
    print(file.tell())
    file.writelines(['aaaaa
    ','bbbbb
    ','ccccc
    '])
    print (file.tell())
    file.seek(0)
    file.write('all or nothing,now or never')
    file.close()

      程序运行结果:

        5.name属性:读取文件名

         closed属性:关闭文件流返回true,未关闭返回false

        6.flush():flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

    四、file中with的用法

       在使用文件的时候,经常会忘记关闭文件流,使用with语句可以避免这种情况的发生。程序代码如下:

    import codecs
    
    with codecs.open('1.txt','rb') as file:
        print (file.read())
        print (file.closed)
    print (file.closed)

      程序运行结果:

      打印文件的行号与内容,程序代码如下:

    import codecs
    with codecs.open('1.txt','rb') as ff:
        for line, value  in enumerate(ff):
             print (line, value)

      程序运行结果如下:

      制定行输出,程序代码如下:

    import codecs
    import linecache
    
    with codecs.open('1.txt','rb') as ff:
        for line, value  in enumerate(ff):
             if line == 4-1:
                 print (value)
    
    
    count  = linecache.getline('1.txt',4)
    print (count)    

      程序运行结果:

       

  • 相关阅读:
    【STM32】串行通信原理
    【STM32】NVIC中断优先级管理
    【Linux-驱动】RTC设备驱动架构
    【Linux-驱动】在sysfs下创建对应的class节点---class_create
    【Linux-驱动】将cdev加入到系统中去---cdev_add
    【Linux-驱动】简单字符设备驱动结构和初始化
    【Linux-驱动】printk的打印级别
    【Linux 网络编程】REUSADDR
    【Linux 网络编程】常用TCP/IP网络编程函数
    linux定时重启tomcat脚本
  • 原文地址:https://www.cnblogs.com/huangdongju/p/7743956.html
Copyright © 2011-2022 走看看