当前位置: 首页 > article >正文

萌新学 Python 之 with 文件操作语句

with 语句用于资源管理,避免资源泄露,对文件操作时,不管文件是否有异常,都会自动清理和关闭

with 语句的格式:

with open('文件路径', mode='模式', encoding='utf-8') as file_obj:    # as 取别名
    print('对文件进行操作,操作完成后不需要则 close 关闭文件')
    pass

举个简单的例子:读取 d 盘下的指定文件,r 是只读,w 是只写

read(),读取文件内容,保存的是字符串

write(),写入内容

with open(r'd:\test.txt', mode='r', encoding='utf-8') as f:
    content = f.read()       # 读取文件内容,保存到 content 中(保存的是 str 字符串类型)
    print(content)

在指定位置插入新内容:

因为原 test.txt 文本有内容,如果在末尾添加新内容,先要计算字符串长度,再在后面添加,

中间插入同理,需要用到索引下标切片,若是修改内容,在修改的字符串位置写入新内容即可

注意,写入操作完成后,自动关闭,需要再读取文件重新打开

# 在指定位置插入内容
with open(r'd:\test.txt', mode='r', encoding='utf-8') as f1:
    content = f1.read()

str_len = 4
new_content = content[:str_len] + '\n你好' + content[str_len:]

# 新内容写入原文件
with open(r'd:\test.txt', mode='w', encoding='utf-8') as f2:
    f2.write(new_content)

# 上面操作文件自动关闭了,需要重新打开
with open(r'd:\test.txt', mode='r', encoding='utf-8') as f3:
    print(f3.read())

在指定行插入新内容:

readlines(),内容返回列表

insert 插入,下标从 0 开始,如果原行数不够,在末尾插入

writelines(),新内容写入行

# 在指定行插入新内容
with open(r'd:\test.txt', mode='r', encoding='utf-8') as f1:
    content = f1.readlines()         # 内容返回列表
    print(content)

content.insert(2, '你好')             # 下标从0开始,实则是在第三行插入内容,若是原行数不够,在末尾插入

with open(r'd:\test.txt', mode='w', encoding='utf-8') as f2:
    f2.writelines(content)           # 将新内容写入行

with open(r'd:\test.txt', mode='r', encoding='utf-8') as f3:
    print(f3.read())

案例:创建一个目录 file_txt,生成 10 个 001.txt,...,010.txt 文件,并且每个文件随机写入 10 个 a ~ z 的字母

先判断目录是否存在 os.path.exists(path)

创建目录 os.makedirs(path)

for 循环生成 10 个文件,os.path.join() 路径拼接文件路径

注意 '{:03d}.txt'.format(i) 格式化输出要加冒号,前面是索引位置

文件 w 只写,random.choices() 从给定的序列中随机选择元素

string.ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'  字母小写

抽取 10 次结果返回,概率一致,写入生成的文本文件

# 创建一个目录 file_txt,生成 10 个 001.txt,...,010.txt 文件,并且每个文件随机写入 10 个 a ~ z 的字母
import os.path
import random
import string

path = './file_txt'     # 在当前文件指定目录的路径
if not os.path.exists(path):     # 如果该目录不存在
    os.makedirs(path)            # 创建目录
    for i in range(1, 11):
        file_name = os.path.join(path, '{:03d}.txt'.format(i))
        with open(file_name, mode='w') as f:
            random_str = ''.join(random.choices(string.ascii_lowercase, k=10))
            f.write(random_str)

可以看到生成目录,目录下生成文本文件

打开看,每个文件随机生成 10 个字母


http://www.kler.cn/a/567810.html

相关文章:

  • AVFormatContext
  • C#里使用MSMQ来实现跨进程通讯
  • mysql安装教程,超详细图文教程(附安装包)MySQL8.0安装教程
  • 使用宝塔管理服务器
  • DeepSeek效应初现:Grok-3补刀ChatGPT,OpenAI已在ICU?
  • 设计模式-(状态模式,策略模式,代理模式,责任链模式)
  • 虚拟机如何设置ip
  • Metal 学习笔记五:3D变换
  • 7.1.1 计算机网络的组成
  • 如何修改安全帽/反光衣检测AI边缘计算智能分析网关V4的IP地址?
  • 计算机网络基础简答题资料(对口高考)
  • 【Java项目】基于SpringBoot的车辆充电桩管理系统
  • 电脑开机无法进入桌面
  • Kafka的高水位、低水位是什么概念?
  • MySQL双主搭建-5.7.35
  • 第16天:C++多线程完全指南 - 从基础到现代并发编程
  • 云厂商中支持为物理服务器(如裸金属服务器)分配并显示公网IP
  • 【机器学习】 [代码篇] 30. KNN - sklearn 以及 自定义KNN 的实现
  • WSL,Power shell 和CMD, Git bash的区别
  • FPGA:UART串口接收(高干扰情况)