python笔记-文件

1、文件读取

  • 相对路径打开文件
    f = open('test.txt',mode='r',encoding='utf-8')
    f = open('../第9章/test2.txt','r',encoding='utf-8')
    f = open('../test3.txt','r',encoding='utf-8')
  • 第一个参数是文件路径及文件名称(与py程序在一个目录下不需要写路径)
  • 第二个参数是文件属性,默认是只读属性
  • 第三个参数是文件编码方式,根据自己的需求设置
  • 绝对路径打开文件
点击查看代码
import os
path = os.getcwd()
file_path = path + '/test.txt'
f = open(file_path,mode='r',encoding='utf-8')
  • 读取文件
  • 全部读取文件
    context = f.read()
  • 按行读取文件
点击查看代码
with open('file.txt', 'r') as f:
    line1 = f.readline()  # 读取第一行
    line2 = f.readline()  # 读取第二行
    # 每次调用读取下一行
  • 一次性读取所有行数据,返回列表
点击查看代码
# 一次性读取所有行,返回列表
with open('file.txt', 'r') as f:
    all_lines = f.readlines()  # 读取全部内容
  • 文件迭代器读取文件
点击查看代码
with open('test.txt',mode='r',encoding='utf-8') as f:
    for line in f:#逐行迭代,不一次性加载内存
        #自行处理每行的(换行\n)
        prcess_line = line.strip()
        print(prcess_line)
  • 带行号读取文件
点击查看代码
with open('test.txt',mode='r',encoding='utf-8') as f:
    for line_num,line in enumerate(f,1):
        print(f"第{line_num}行:{line.strip()}")
  • 文件读取方式建议
  1. 小文件 (<10MB): read() 或 readlines()
  2. 大文件 (>10MB): 使用文件迭代器 (for line in f)
  3. 超大文件 (>100MB): 分块读取 (read(size)) 或内存映射
  4. 需要随机访问: readlines() 或内存映射
  5. 流式处理: readline() 或迭代器

2、文件属性

  • mode='r' 只读【默认模式,文件必须存在,不存在则抛出异常】
  • mode='w' 只写,写之前会清空文件的内容,如果文件不存在,会创建新文件
  • mode='a' 追加方式,在原本内容中继续写,如果文件不存在,则会创建新文件
  • mode='r+' 可读可写
  • mode='w+' 打开一个文件用于读写,如果该文件存在则将其覆盖。如果该文件不存在,创建新文件
  • mode='a+' 打开一个文件用于读写,如果该文件存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
  • mode='b' rb、wb、ab、rb+、wb+、ab+意义和上面一样,用于二进制文件操作
    3、文件写入
  • 注意:excel类型文件写入时,编码方式需要写成utf-8-sig(它会在文件开头自动写入 BOM(\ufeff),这样 Excel 就能正确识别为 UTF-8)
  • write()方式写入文件
点击查看代码
with open('test1.txt',mode='w',encoding='utf-8') as f:
    f.write('Hello World\n')
    f.write('这是第二行写入内容\n')
    f.write('这是第三行写入内容\n')
print('基本写入方式完成!!!')
  • writelines()方式写入文件
点击查看代码
lines = ['写入第一行内容\n','写入第二行内容\n','写入第三行内容\n']
with open('test2.txt',mode='w',encoding='utf-8') as f:
    f.writelines(lines)
print('writelines()写入方式完成!!!')

#或者使用join
context = ''.join(lines)
with open('test3.txt',mode='w',encoding='utf-8') as f:
    f.writelines(context)
print('join拼接写入方式完成!!!')
  • 追加写入
点击查看代码
#第一次运行 - 创建文件
with open('test4.txt',mode='a',encoding='utf-8') as f:
    f.write('===程序开始运行===\n')
    f.write('2025-12-29 10:00:01 - 初始化完成\n')

#第二次运行 - 追加内容
with open('test4.txt',mode='a',encoding='utf-8') as f:
    f.write('2026-12-29 10:05:00 - 数据处理完成\n')
    f.write('2025-12-29 10:25:01 - 程序正常结束\n')
print('追加写入方式完成!!!')

4、with 用法

  • (不用手动关闭文件,程序退出with后自动关闭文件)
    with open('filename',mode='rw',encoding='utf-8') as f:
    context = f.read()
    f.write('写入的内容')

5、csv文件读取

  • 使用csv模块 import csv
  • csv文件获取文件的编码类型
点击查看代码
#检测文件编码
def detect_encoding(file_path):
    with open(file_path, 'rb') as f:
        result = chardet.detect(f.read())
        return result['encoding']
  • 读取csv标头信息
点击查看代码
with open('data.csv', mode='r', encoding=csv_encoding, ) as f:
    # context = f.read()
    # print(context)
    cf = csv.reader(f) #将纯文本文件转变成csv文件,使用csv库函数处理
    head = next(cf)   #获取迭代器的一个元素,读取表头信息
    print(f"使用编码{csv_encoding},读取标头:{head}")
  • 读取csv指定几行数据 (需要提前读取表头信息)
点击查看代码
with open('data.csv', mode='r', encoding=csv_encoding, ) as f:
    #读取前几行数据
    # for i,row in enumerate(cf):
    #     if i <10:   #显示前三行的数据
    #         print(f"第{i+1}行数据:{row}")
    #     else:
    #         break
  • 基础的csv文件数据处理(求平均数)
点击查看代码
with open('data.csv', mode='r', encoding=csv_encoding, ) as f:
    #成绩的平均分
    socres = []
    for i in cf:
        socres.append(int(i[2]))
    print(f"全班同学的平均分是:{round(sum(socres)/len(socres),2)}")

6、csv文件写入

  • 写入单行数据
点击查看代码
#其中newline=''避免写入时出现多余的空行(Windows 上常见问题)
with open('data.csv',mode='a',encoding='utf-8',newline='') as f:
     cf = csv.writer(f)
     #如果csv内容为空,则先写入标头
     if f.tell() ==0:
        cf.writerow(['姓名','课程','成绩'])
  • 多行写入
点击查看代码
    with open('data.csv',mode='a',encoding='utf-8',newline='') as f:
        cf = csv.writer(f)
        #如果csv内容为空,则先写入标头
        if f.tell() ==0:
            cf.writerow(['姓名','课程','成绩'])
        #csv 多行写入内容
        list_csv = [['lily','c','70'],['cate','c','80'],['jery','c','90']]
        cf.writerows(list_csv)
posted @ 2025-12-26 15:18  jake瑞  阅读(9)  评论(0)    收藏  举报