当前位置:首页>python>【Python实战】文件操作教程,with与非with写法全吃透

【Python实战】文件操作教程,with与非with写法全吃透

  • 2026-09-06 02:14:28
【Python实战】文件操作教程,with与非with写法全吃透

一、文件操作核心:open()函数

不管用不用with,操作文件的第一步,永远是用open()函数打开文件,它是文件操作的入口。

基础语法

open(文件路径,打开模式,编码方式)
  • 打开模式:决定你能对这个文件做什么(读/写/追加)

模式
含义
注意事项
r
只读
文件不存在时,会报错
w
只写
覆盖原有内容,文件不存在自动创建
a
追加
在文件末尾添加内容,不覆盖原有内容
  • 编码方式:encoding="utf-8"必加,防止中文乱码,尤其是Windows系统,少了这一步大概率会报错

二、with写法实战——"r"

1. 读取文件——3种读取方法,按需使用,小文件、大文件都能覆盖:

#一次性读取全部内容(适合小文件)with open("test.txt", "r", encoding="utf-8") as f:  content = f.read()  print(content)#按行读取(只读第一行)with open("test.txt", "r", encoding="utf-8") as f:  line = f.readline()  print(line)#读取所有行,返回列表(最常用)with open("test.txt", "r", encoding="utf-8") as f:  lines = f.readlines()  print(lines)

2. 遍历文件(逐行处理)

#逐行读取并打印with open("test.txt", "r", encoding="utf-8") as f:  for line in f:    print(line.strip()) #去掉换行符和空格

三、with写法实战——"w"/"a"

1. 写入文件——"w"

    w模式会清空文件原有内容,写入前一定要确认文件内容!

#写入单行with open("test.txt", "w", encoding="utf-8") as f:  f.write("Hello Python! \n") #\n表示换行#写入多行with open("test.txt", "w", encoding="utf-8") as f:  f.writelines(["第一行\n", "第二行\n", "第三行\n"])

2. 追加内容——"a"

    不覆盖原有内容,在文件末尾添加文字

with open("test.txt", "a", encoding="utf-8") as f:  f.write("我要追加的内容:\n")

四、不用with(手动关闭,注意风险)

1. 读取文件

#打开文件f = open("test.txt", "r", encoding="utf-8")#读取内容content = f.read()print(content)#手动关闭文件(非常重要)f.close()#遍历文件f = open("test.txt", "r", encoding="utf-8")for line in f:  print(line.strip())f.close()

2. 写入文件

#打开文件f = open("test.txt", "w", encoding="utf-8")#写入内容f.write("我不用with也能写入内容")#手动关闭文件(非常重要)f.close()

3. 追加内容

#打开文件f = open("test.txt", "a", encoding="utf-8")#追加内容f.write("我不用with也能追加内容")#手动关闭文件(非常重要)f.close()

五、重点提醒:不用with的风险(必看)

为什么大家都推荐with?因为不用with有两个致命风险,新手很容易踩坑:

1. 风险1:容易忘记写 f.close()。忘记关闭文件,会导致文件一直被系统占用,可能出现“内容写不进去” “文件损坏” “占用内存”等问题;

2. 风险2:代码中途报错,文件关不掉。比如代码执行到一半报错,后续的f.close()根本执行不到,文件会一直处于“打开”状态,引发异常。

六、高频实战场景

1. 复制文件内容

with open("source.txt", "r", encoding="utf-8") as f1:  content = f1.read()with open("target.txt", "w", encoding="utf-8") as f2:  f2.write(content)print("文件复制成功!")f1 = open("source.txt", "r", encoding="utf-8")f2 = open("target.txt", "w", encoding="utf-8")try:  content = f1.read()  f2.write(content)  print("文件复制成功!")finally:  f1.close()  f2.close()

2. 批量写入数据

data = ["姓名:张三", "年龄:25", "城市:北京"]with open("info.txt", "w", encoding="utf-8") as f:  for item in data:    f.write(item + "\n")data = ["姓名:张三", "年龄:25", "城市:北京"]f = open("info.txt", "w", encoding="utf-8")try:  for item in data:    f.write(item + "\n")finally:  f.close()

3. 读取配置文件

config = {}withopen("config.txt", "r", encoding="utf-8") as f:  for line in f:    key, value = line.strip().split("=")    config[key] = valueprint(config)  # 输出:{'username': 'admin', 'password': '123456'}config = {}f = open("config.txt", "r", encoding="utf-8")try:  for line in f:    key, value = line.strip().split("=")    config[key] = value  print(config)finally:  f.close()

最新文章

随机文章