Python文件操作

Python文件操作

  • 文件操作方法
  • 文件操作模式
  • 简易版本的拷贝功能
  • 文本模式与二进制模式读写操作
  • 文件内光标的移动
  • 文件内容修改

一、文件操作方法

  1. 读系列

    read() 一次性读取文件内所有的内容

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())  # 一次性读取文件内所有的内容

Python文件操作

     readline() 每次只读文件一行内容

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.readline())  # 每次只读文件一行内容

Python文件操作

     readlines() 读取文件内所有内容,组织成列表,每个元素是文件的每行内容

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.readlines())  # 读取文件所有的内容,组织成列表,每个元素是文件的每行内容

Python文件操作

     readable() 判断当前文件是否可读

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.readable())  # 判断当前文件是否具备读的能力

Python文件操作

   2. 写系列

    write() 往文件中写入文件内容

with open(r'a.txt', 'w', encoding='utf8') as f:
    f.write('aaa\nbbb\nccc')  # 写入内容必须是字符串类型

    文件中就出现了写入的内容:

Python文件操作

     writelines() 可以将列表中多个字符串元素全部写入

with open(r'a.txt', 'w', encoding='utf8') as f:
    f.writelines(['ddd', 'eee', 'fff'])  # 可以将列表中多个字符串元素全部写入

    文件中如图所示:

Python文件操作

     writeable() 判断当前文件是否具备可写能力

with open(r'a.txt', 'w', encoding='utf8') as f:
    print(f.writable())  # 判断当前文件是否具备可写能力

Python文件操作

     flush() 在Python中调用文件写方法时,紧接着调用flush()方法,可以将文件立即写入磁盘中

with open(r'a.txt', 'w', encoding='utf8') as f:
    f.write('aaa\nbbb\nccc')
    f.flush()  # 直接将内存内文件数据刷到硬盘 相当于ctrl+s

  3. 文件优化操作

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())  # 一次性读取文件内所有的内容
    print(f.read())  # 一次性读取文件内所有的内容
    print(f.read())  # 一次性读取文件内所有的内容

Python文件操作

     可以看出,这种方法去取文件存在一些问题:

      1) 一次性读取完之后,光标停留在了文件末尾,无法再抽读取内容

      2) 该方法在读取大文件的时候,可能会造成内存溢出的情况

     我们可以使用逐行读取文件内容的方式解决上述问题。

with open(r'a.txt', 'r', encoding='utf8') as f:
    for line in f:  # 文件变量名f支持for循环,相当于一行行读取文件内容
        print(line, end='')

    涉及到多行文件内容的情况一般都是采用for循环读取。

二、文件操作模式

  1. t  文本模式

    1) 文本模式是默认的模式,r只读、w只写和a只追加默认为  rt  wt  at

    2) 该模式所有操作都是以字符串为基本单位(文本)

    3) 该模式必须要指定encoding参数

    4) 该模式只能操作文本文件

  2. b  二进制模式

    1) 该模式需要指定,使用二进制模式用  rb  wb  ab

    2) 该模式所有操作都是以bytes类型(二进制)基本单位

    3) 该模式不需要指定encoding参数

    4) 该模式可以操作任意类型的文件

三、简易版本的拷贝内容

  1.功能

    1) 获取待拷贝的目标文件路径

    2) 获取即将拷贝到哪个地方的新路径

    3) 利用文件操作实现数据拷贝

  2. 实现

# 1.待拷贝的文件路径
wait_copy_file = input('待拷贝的文件路径:').strip()
# 2.新的文件路径
new_file_path = input('新路径:').strip()
# 3.以r模式打开步骤1的路径,以w模式打开步骤2的路径
with open(r'%s' % wait_copy_file, 'rb') as f1, \
        open(r'%s' % new_file_path, 'wb') as f2:
    for line in f1:
        f2.write(line)

Python文件操作

a.txt中的内容:

Python文件操作

 b.txt中的内容:

Python文件操作

     拷贝成功!该程序使用的是二进制模式,支持拷贝其他格式的文件(如:jpg、mp4等)。

 四、文本模式与二进制模式读写操作

  1. read()  括号内可以放数字

    在t模式下表示字符个数

    在b模式下表示字节个数

      英文字符统一使用一个bytes来表示,中文字符统一使用三个bytes来表示

  2. 例子

with open(r'a.txt', 'rb') as f:
    print(f.read(6).decode('utf8'))

    结果输出两个中文字符:

Python文件操作

with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read(4))

    结果输出四个中文字符:

Python文件操作

 五、文件内光标的移动

  1. seek()  控制文件内光标的移动

    f.seek(offset, whence)

    offset表示位移量

      1) 始终是以字节为最小单位

      2) 正数是从左往右移动

      3) 负数是从右往左移动

    whence表示模式

      1) 0:以文件开头为参考系(支持tb两种模式)

      2) 1:只支持b模式,以当前位置为参考系

      3) 2:只支持b模式,以文件末尾为参考系

  2. 小练习

    实现动态查看最新一条日志的效果

import time
with open('a.txt', 'rb') as f:
    f.seek(0, 2)
    while True:
        line = f.readline()
        if len(line) == 0:
            # 没有内容
            time.sleep(0.5)
        else:
            print(line.decode('utf-8'), end='')

六、文件内容修改

  1. 覆盖

with open(r'a.txt', 'r', encoding='utf8') as f:
    data = f.read()
with open(r'a.txt', 'w', encoding='utf8') as f1:
    new_data = data.replace('aaa', 'ccc')
    f1.write(new_data)

    修改前:

Python文件操作

     修改后:

Python文件操作

  2. 新建

import os

with open('a.txt', mode='rt', encoding='utf-8') as read_f, \
        open('a.txt.swap', mode='wt', encoding='utf-8') as write_f:
    for line in read_f:
        write_f.write(line.replace('ccc', 'fff'))
os.remove('a.txt')  # 删除原文件
os.rename('a.txt.swap', 'a.txt')  # 重命名文件

    修改前:

Python文件操作

     修改后:

Python文件操作

上一篇:57-二叉树的下一个节点


下一篇:python基础之操作文件