python:文件的读取操作

open():打开文件函数

语法

使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

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

函数功能:打开文件并返回相应的文件对象。如果无法打开文件,则会引发 OSError 异常。

函数主要参数解释:

  • file:该参数是一个路径对象,提供要打开的文件的路径名(绝对路径或相对于当前工作目录的相对路径),或者是要包装的文件的整数文件描述符。
  • mode:模式是一个可选的字符串,指定文件打开的方式。默认值为 'r',表示以文本模式读取文件。其他常见值包括 'w' 表示写入(如果文件已存在则先清空内容),'x' 表示独占创建,以及 'a' 表示追加。可用的模式包括:
  • 字符 含义
    'r' 以只读方式打开文件。文件的指针会放在文件的开头,这是默认模式
    'w' 以写入模式打开文件。如果该文件存在,则打开文件,并从头开始编辑,原有内容会被删除;如果该文件不存在,则创建新文件
    'x' 以独占创建模式打开,如果文件已存在则失败
    'a' 以写入模式打开文件。如果文件存在,则在文件末尾追加内容;如果该文件不存在,则创建新文件进行写入
    'b' 二进制模式
    't' 文本模式(默认)
    '+' 以更新模式打开(读写)

    默认模式是 'r'(以文本模式打开读取,等同于 'rt')。

    Python 区分二进制和文本 I/O。以二进制模式打开的文件(在模式参数中包含 'b')返回的内容是bytes对象,不进行任何解码。在文本模式下(默认模式或在模式参数中包含 't'),文件内容作为 str 返回,字节首先使用平台相关的编码或指定的编码进行解码。

  • encodingencoding 是用于对文件进行解码或编码的编码名称,这仅应在文本模式下使用。推荐使用UTF-8。
  • 示例:打开文件

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    print(f'open函数返回的类型是:{type(f)}')

    运行结果:

     文件读操作:read()方法

    语法

    文件对象.read(size=-1)

    从流中读取最多 size 个字符,并将其作为单个字符串返回。如果 size 为负数或 None,则一直读取到文件末尾(EOF)。

    注意:如果多次调用read方法,后续的read会在前一次读取的末尾处接着读取的,而不是从头开始读取。

    示例

    示例:读取指定数量的字符

    要被读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    # 读取10个字符
    print(f'读取的10个字符是:{f.read(10)}')

    运行结果:

    示例:读取所有的内容 

    要读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    # 读取所有的内容
    print(f'读取的内容是:{f.read()}')

    运行结果:

    示例:多次调用read方法

    要读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    print(f'第1次读取的5个字符是:{f.read(5)}')
    print(f'第2次读取的5个字符是:{f.read(5)}')
    print(f'第3次读取的内容是:{f.read()}')

    运行结果:

    文件读操作:readline()方法

    语法

    文件对象.readline(size=-1)

    读取直到换行符或文件末尾(EOF),并返回一个字符串。如果流已经到达 EOF,则返回空字符串。

    如果指定了 size,最多将读取 size 个字符。

    注意:是从文件指针的地方开始读取。如果前面读取了文件,例如使用read方法,那么指针就移动了,再用readline方法读取,是从指针的地方开始读取,而不是从文件的开头读取。

    示例

    要读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    line1 = f.readline()
    line2 = f.readline()
    line3 = f.readline()
    print(f'第1行数据是:{line1}')
    print(f'第2行数据是:{line2}')
    print(f'第3行数据是:{line3}')

    运行结果:

    文件读操作:readlines()方法

    语法

    文件对象.readlines(hint=- 1)

    从流中读取并返回一个行列表。可以通过 hint 参数控制读取的行数:如果到目前为止所有行的字节/字符总数超过 hint,则不再读取更多行。

    hint 的值小于或等于 0,以及 None,都被视为没有提示。

    请注意,已经可以使用 for line in file: … 迭代文件对象,而无需调用 file.readlines()。

    注意:是从文件指针的地方开始读取。如果前面读取了文件,例如使用read方法,那么指针就移动了,再用readlines方法读取,是从指针的地方开始读取,而不是从文件的开头读取。

    示例

    示例:读取文件的所有行

    要读取的文件:

    读取操作 :

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    lines = f.readlines()
    print(f'lines的类型是:{type(lines)}')
    print(f'lines对象的内容是:{lines}')

    运行结果:

    for 循环读取文件行

    示例:

    要读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    for line in f:
        print(f'读取的该行数据是:{line}')

    运行结果:

    文件关闭操作:close()方法

     语法

    close()

    清空并关闭此流。如果文件已经关闭,则此方法无效。一旦文件关闭,对文件的任何操作(例如读取或写入)都会引发 ValueError 异常。

    作为方便起见,允许多次调用此方法;但是,只有第一次调用才会生效。

    示例

    关闭文件后再读文件会导致出错

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    f = open('test.txt', 'r', encoding='UTF-8')
    
    f.close()
    # 关闭后再读文件会出错
    f.readline()

    运行结果:

    with open语法 

    语法

    with open('test.txt', 'r', encoding='UTF-8') as f:
        # 对文件进行操作,例如f.readlines()

    在 with open语句块中对文件进行操作,可以在操作完成后自动关闭文件,避免漏掉close方法。

    示例 

    示例:读取文件

    要读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    with open('test.txt', 'r', encoding='UTF-8') as f:
       for line in f:
           print(line)
    

    运行结果:

    示例:在with open语句块之外再直接读取文件,会报错

    下面示例中,在with open语句块之外调用 f.readlines()报错了,原因是with open语句块执行完毕后,文件已经关闭了。

    要读取的文件:

    读取操作:

    # 打开文件
    # 注意:为了演示,前两个参数使用了位置传参,而encoding并不是第3个参数,所以要使用关键字传参
    with open('test.txt', 'r', encoding='UTF-8') as f:
       for line in f:
           print(line)
    
    # 现在读取会报错,因为文件已经关闭了
    f.readlines()

    运行结果:

    作者:听海边涛声

    物联沃分享整理
    物联沃-IOTWORD物联网 » python:文件的读取操作

    发表回复