跳至内容
文件读写

文件读写

OS

os.path.join()

os.path.exists()

os.listdir()

os.path.isdir()

open

with open(…) as f

1
2
3
4
5
  # 例子
  with open('_20_data.txt', 'r') as file:
      # 读取数据 N\n1 2 3
      n = int(file.readline().strip())
      data = list(map(int, file.read().split()))

参数1:文件地址

参数2:读写方式

  • w从头写 r只读 a追加

    读写方式是否为 二进制是否为 可读可写
    r空空
    wb+
    a

    共 3*2*2=12种

  • 模式对照表 和 f.seek(n)

    模式描述文件存在文件不存在指针位置
    r+读写(文件必须存在)不清空,从指针位置“覆盖写”报错开头
    w+写读(清空后读写)必定清空,从指针位置写创建开头
    a+追加读写必定从末尾写创建末尾
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    # 创建文件
    with open('test_r+.txt', 'w') as f:
        f.write('旧内容')
    
    # r+ 
    try:	# 不存在改文件会报错
        with open('test_r+.txt', 'r+') as f:
            print(f.read())   # 输出: 旧内容^   (^指针位置)
            f.seek(0)	      # ^旧内容	(移动指针位置到开头)
            f.write('新')     # 新^内容	(从指针位置覆盖写入)
            f.seek(0)	      # ^新内容
            print(f.read())   # 输出: 新内容
    except FileNotFoundError:
        print("文件不存在")
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    # 创建文件
    with open('test_w+.txt', 'w') as f:
        f.write('原始内容')
    
    # w+ 
    with open('test_w+.txt', 'w+') as f:
        f.write('全新内容')  # 清空后写入  全新内容^
        f.seek(0)	        # 移动指针到开头		^全新内容
        print(f.read())      # 输出: 全新内容
    
    # 文件不存在时
    import os
    with open('new_w+.txt', 'w+') as f:
        f.write('创建内容')		
        f.seek(0)
        print(os.path.abspath('new_w+.txt'))      # 输出: 创建的文件的绝对路径
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    # 创建文件
    with open('test_a+.txt', 'w') as f:
        f.write('初始行\n')
    
    # a+ 
    with open('test_a+.txt', 'a+') as f:
        f.write('追加行\n')   # 追加行\n^
        f.seek(0)            # ^初始行\n追加行\n
        print(f.read())      # 输出: 初始行\n追加行\n
    
        # 验证指针特性
        f.seek(5)            # 初始行\n追^加行\n
        f.write('中间插入')   # 仍然追加到文件末尾!
        f.seek(0)
        print(f.read())      # 输出: 初始行\n追加行\n中间插入
最后更新于