• 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')

     

  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/blogzyq/p/11170925.html
Copyright © 2020-2023  润新知