zoukankan      html  css  js  c++  java
  • python 读写文件

    0,文件有两种类型:文本文件和二进制文件。

    1,首先用到内置的open()函数,创建一个stream对象。

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

    常用的参数三个:1,file文件名;2,mode文件打开模式;3,encoding编码(只对文本文件有效)

    mode打开模式:

    'r' open for reading (default)
    'w' open for writing, truncating the file first
    'x' create a new file and open it for writing
    'a' open for writing, appending to the end of the file if it exists
    'b' binary mode
    't' text mode (default)
    '+' open a disk file for updating (reading and writing)
    'U' universal newline mode (deprecated)

    2,读取一个文本文件:

    file = open("test.txt")
    data = file.read()
    file.close()

    这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是处理异常的加强版本:
    file = open("test.txt")
    try:
      data = file.read()
    finally:
      file.close()

    虽然这段代码运行良好,但是太冗长了。这时候就是with一展身手的时候了。
    with open("test.txt") as file:
      data = file.read()

    3,面对文本文件,对象提供了三个“读”方法:read()、readline()和readlines()。每种方法可以接受一个变量以限制每次读取的数据量。

    read()每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
    readlines()一次读取整个文件,自动将文件内容分析成一个行的列表。
    readline() 每次只读取一行。

    注意:

    这三种方法是把每行末尾的' '也读进来了,它并不会默认的把' '去掉,需要我们手动去掉。字符串的rstrip(' ')方法去掉后面的字符' '

    文件对象提供了两个“写”方法: write() 和 writelines()。 

     

    4,遍历文件的所有行,也可以用遍历文件对象的方式:

    for line in file:

      print(line)

    5,文件对象的位置

    前面的例子中,我们已经读到文件的末尾,如果要再从头读的话就要调用f.seek(0)来设置文件对象的位置到文件开头。

    这个方法有两个参数:f.seek(cookie, whence=0)

    cookie 是位置偏移量
    whence 是相对位置,它有三种相对位置:

    0 文件开头,偏移量是0或整数;
    1 当前位置,偏移量可以是负数;
    2 文件末尾,偏移量通常是负数;

    如何查看当前位置呢?调用f.tell()方法。

    6,字符编码

    对于文本文件,可能需要给open()函数传入encoding参数,例如,读取utf-8编码的文件:
      f = open('test.txt', 'r', encoding='utf-8')
      f.read()
    遇到有些编码不规范的文件,open()函数还可以接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
      f = open('test.txt', 'r', encoding='gbk', errors='ignore')

     

  • 相关阅读:
    CentOS 设置mysql的远程访问
    centos的防火墙命令
    gorm的related理解和实例
    epoll相比select,poll的2个改进点
    limit越往后越慢,如何解决?
    LRUCache的设计,实现和调试
    map可以并发读,不能并发写
    2020年4月上旬算法讨论4(快排和堆排)
    删除链表节点代码编写复盘(从直接思路到优雅思路)
    2020年3月下寻算法讨论3(链表-下)
  • 原文地址:https://www.cnblogs.com/blogzyq/p/11170925.html
Copyright © 2011-2022 走看看