Loading

文件读写

open函数

要读写文件,首先要通过内置函数open 打开文件,获得文件对象。

函数open的参数如下

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

其中下面这3个参数是我们常用的。

  • 参数 file

    file参数指定了要打开文件的路径。

    可以是相对路径,比如 ‘log.txt’, 就是指当前工作目录下面的log.txt 文件 也可以是绝对路径,比如 ’d:\project\log\log.txt’,

  • 参数 mode

    mode参数指定了文件打开的 模式 ,打开文件的模式 决定了可以怎样操作文件。

    常用的打开模式有

    • r 只读文本模式打开,这是最常用的一种模式(默认模式)
    • w 只写文本模式打开(该模式会覆盖之前的文件)
    • a 追加文本模式打开

    如果我们要 读取文本文件内容到字符串对象中 , 就应该使用 r 模式。

    我们可以发现mode参数的缺省值 就是 ‘r’ 。

    就是说,调用open函数时,如果没有指定参数mode的值,那么该参数就使用缺省值 ‘r’,表示只读打开。

    如果我们要 创建一个新文件写入内容,或者清空某个文本文件重新写入内容, 就应该使用 ‘w’ 模式。

    如果我们要 从某个文件末尾添加内容, 就应该使用 ‘a’ 模式。

  • 参数 encoding

    encoding 参数指定了读写文本文件时,使用的 字符编解码 方式。

    调用open函数时,如果传入了encoding参数值:

      后面调用write写入字符串到文件中,open函数会使用指定encoding编码为字节串;
        
      后面调用read从文件中读取内容,open函数会使用指定encoding解码为字符串对象
    

    如果调用的时候没有传入encoding参数值,open函数会使用系统缺省字符编码方式。 比如在中文的Windows系统上,就是使用cp936(就是gbk编码)。

    建议大家编写代码 读写文本文件时,都指定该参数的值。

    注意点

    read函数有参数size,读取文本文件的时候,用来指定这次读取多少个字符。 如果不传入该参数,就是读取文件中所有的内容。

    大家可以创建一个文本文件,内容如下

    hello
    cHl0aG9uMy52aXAgYWxsIHJpZ2h0cyByZXNlcnZlZA==
    

    我们可以这样读取该文本文件

    # 因为是读取文本文件的模式, 可以无须指定 mode参数
    # 因为都是 英文字符,基本上所以的编码方式都兼容ASCII,可以无须指定encoding参数
    f = open('tmp.txt')
    
    tmp = f.read(3)  # read 方法读取3个字符
    print(tmp)       # 返回3个字符的字符串 'hel' 
    
    
    tmp = f.read(3)  # 继续使用 read 方法读取3个字符
    print(tmp)       # 返回3个字符的字符串 'lo\n'  换行符也是一个字符
    
    
    tmp = f.read()  # 不加参数,读取剩余的所有字符
    print(tmp)       # 返回剩余字符的字符串 'cHl0aG9uMy52aXAgYWxsIHJpZ2h0cyByZXNlcnZlZA==' 
    
    
    # 文件操作完毕后, 使用close 方法关闭该文件对象
    f.close()  
    

    读取文本文件内容的时候,通常还会使用readlines方法,该方法会返回一个列表。 列表中的每个元素依次对应文本文件中每行内容。

    f = open('tmp.txt')
    linelist = f.readlines() 
    f.close()  
    for line in linelist:
        print(line)
    

    但是这种方法,列表的每个元素对应的字符串 最后有一个换行符。 如果你不想要换行符,可以使用字符串对象的splitlines方法

    f = open('tmp.txt')
    content = f.read()   # 读取全部文件内容
    f.close()  
    
    # 将文件内容字符串 按换行符 切割 到列表中,每个元素依次对应一行
    linelist = content.splitlines()
    for line in linelist:
        print(line)
    

with 语句

如果我们开发的程序 在进行文件读写之后,忘记使用close方法关闭文件, 就可能造成意想不到的问题。

我们可以使用with 语句 打开文件,像这样,就不需要我们调用close方法关闭文件。 Python解释器会帮我们调用文件对象的close方法。

如下

# open返回的对象 赋值为 变量 f
with open('tmp.txt') as f:
    linelist = f.readlines() 
    for line in linelist:
        print(line)

对文件的操作都放在with下面的缩进的代码块中。

转自:http://www.python3.vip/tut/py/basic/13/

posted @ 2020-09-27 20:53  北兢王  阅读(185)  评论(0)    收藏  举报