# 3. 文件

# 1. 文件处理 os/pathlib

  1. 遍历文件名

    import os
    
    # 获取文件列表
    sources_path = "./folder"  # 路径
    file_name = os.listdir(sources_path)  # 所有文件名
    
    1
    2
    3
    4
    5
  2. 遍历多层文件夹

    import os
    
    file_list = []
    for root, folder, files in os.walk('./folder'):
        for file_name in files:
            file_list.append(root + '/' + file_name)
    
    1
    2
    3
    4
    5
    6
  3. 检测并创建文件夹

    import os
    
    # 创建文件夹/文件目录
    path = 'abc/'
    # 检测文件夹/文件是否存在,不存在就创建该文件夹
    if not os.path.exists(path):
        print('folder not exist')
        os.makedirs(path)
    else:
        print('folder exist')
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  4. 重命名

    import os
    # 重命名文件
    os.rename(old_name, new_name)
    
    1
    2
    3
  5. 用默认应用打开文件、文件夹

    import os
    os.startfile('file_path')  # 打开文件
    path = ''
    os.system("explorer.exe %s" % path)  # 打开文件夹
    
    1
    2
    3
    4

# 2. 文件读写

# 2.1. 通用文件处理 Open

  1. 读取文件文件

    # 文件名,模式(默认 r), 缓存
    file = open('./test.txt', 'r')
    for line in file:   # 按行读取
        print(line, end='') # end=''避免输出两次换行
    # 关闭文件
    file.close()
    
    1
    2
    3
    4
    5
    6
    # 会自动关闭文件(推荐)
    with open('./test.txt', 'r') as file:
        # 按行读取,也可以用 for line in file.readlines():
        for line in file:
            print(line, end='') # end=''避免输出两次换行
    
    1
    2
    3
    4
    5
  2. 写文件

    # w 写入,a 追加,文件不存在会自动创建
    with open('./test.txt', 'w') as file:
        file.write('123\n')
    
    1
    2
    3
    # 手动打开/关闭文件
    log = open('./logs.txt', 'w')   # 打开
    log.write('abc\n')  # 写入
    log.close() # 关闭
    
    1
    2
    3
    4
  3. 参数

    open 参数 内容
    file (必须)文件名
    mode 打开模式
    buffering 设置缓冲
    encoding 编码
    errors 报错级别
    newline 区分换行符
    closefd 传入的 file 参数类型
    opener 设置自定义开启器
    mode 参数 内容
    w 以写方式打开
    a 以追加模式打开 (从 EOF 开始,必要时创建新文件)
    r+ 以读写模式打开
    w+ 以读写模式打开 (参见 w )
    a+ 以读写模式打开 (参见 a )
    rb 以二进制读模式打开
    wb 以二进制写模式打开 (参见 w )
    ab 以二进制追加模式打开 (参见 a )
    rb+ 以二进制读写模式打开 (参见 r+ )
    wb+ 以二进制读写模式打开 (参见 w+ )
    ab+ 以二进制读写模式打开 (参见 a+ )
  4. 用 numpy 处理 csv 数据的方法

    1. 读取数据
    file = open("filename.csv", "rb")
    # 读取 csv 文件,以逗号为间隔,跳过第一行
    data = np.loadtxt(file, delimiter=",", skiprows=1)
    a = data[行起始:终止,列起始:终止]
    
    1
    2
    3
    4
  5. 用 pandas 读写 csv 文件,参考 pandas 笔记

# 2.2. Excel(xls/xlsx) 文件

  1. 使用 xlrd/xlwt(v2.0 以上不支持 xlsx, 请使用 openpyxl)

    1. 安装库文件

      pip install xlrd
      pip install xlwt
      
      1
      2
    2. 读取文件

      import xlrd
      
      # 打开文件
      data = xlrd.open_workbook('filename.xlsx')
      # 获取第一个工作表
      table = data.sheets()[0]
      # 行列数
      rows = table.nrows
      cols = table.ncols
      # 行列值
      table.row_values(i)
      table.row_values(i)[0]
      table.col_values(i)
      table.col_values(i)[0]
      # 单元格
      table.cell(x,y).value
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
    3. 日期处理

      import xlrd
      from xlrd import xldate_as_datetime
      from xlrd import xldate_as_tuple
      
      xldate_as_datetime(table.row_values(i)[0], 0)  # 2019-06-01 00:00:00
      *xldate_as_tuple(table.row_values(i + 1)[0], 0)  # 2019 6 1 0 0 0
      
      1
      2
      3
      4
      5
      6
  2. 使用 openpyxl

    1. 安装库文件

      pip install openpyxl
      # pandas read_excel 函数也会调用 openpyxl
      
      1
      2
    2. 读取文件

      import openpyxl
      # 打开文件
      wb = openpyxl.load_workbook("file_name.xlsx")
      # 以只读方式打开
      wb = openpyxl.load_workbook("file_name.xlsx", read_only=True)
      
      # 读取 sheet 页
      sheet = wb['sheetname']
      # or
      sheet = wb.worksheets[0]
      
      # 行列数
      sheet.max_column
      sheet.max_row
      # 行列值
      sheet.cell(x, y).value
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
lastUpdate: 3/30/2023, 2:14:30 PM