python学习11_文件操作

一、文件操作

1. open(文件路径,mode=“”,encoding=“”)

1.1 文件路径:

  1. 绝对路径
    d:/test/xxxx.txt
    在项目迁移/部署时候会有坑,

  2. 相对路径
    相对于当前你的程序所在的文件夹
    …/ 上一层文件夹

举例:在09_wenjiancaozuo.py中输入指令打开haha.txt
在这里插入图片描述

open("../first_lesson/haha.txt")

先输入…/返回上个文件夹(pythonProject)然后进入(first_lesson)最终进入(haha.txt)

1.2 mode

符号含义
rread 读取
wwrite 写
aappend 追加写入
b读写的是非文本文件 -> bytes
1.2.1 r:read 读取
读取方式语句备注
全部读取content = f.read()
按行读取line = f.readline()默认从首行开始读取,可以重复读取(详见示例2),但读取结果是两行,因为读取文件中存在换行符
全部读取,存在列表中line = f.readlines()示例:[‘缓缓飘落的枫叶像思念\n’, ‘我点燃烛火温暖岁末的秋天’]。从\n可以看出换行符的存在
循环读取for line in f:最重要的一种读取方式(必须掌握),见示例3

示例1:读取xixi.txt的内容

f = open("xixi.txt", mode="r", encoding="utf-8")
content = f.read() # 全部读取
print(content)

在这里插入图片描述

示例2:按行读取xixi.txt内容

line = f.readline()
print(line)

line = f.readline()
print(line)

在这里插入图片描述
读出结果发现存在自动换行,因为print里面自带换行,如果想不带换行,可以使用之前学到的strip(),支持去掉字符串左右两端的空白、空格、换行,制表符

line = f.readline().strip()
print(line)
line = f.readline().strip()
print(line)

在这里插入图片描述

示例3:用循环读取xixi.txt内容

for line in f:  # 从f中读取每一行数据
    print(line.strip())
1.2.2 w:write 写
1.2.2.1 写入文件

w模式下,如果文件不存在,自动的创建一个文件

open("good.txt", mode="w", encoding="utf-8")

在这里插入图片描述
w模式下,每一次open都会清空文件中的内容

1.2.2.2 在文件中写入内容:
f = open("good.txt", mode="w", encoding="utf-8")
f.write("hello")
f.close()

每次操作之后养成好习惯,要关闭链接
练习:
准备一个列表,要求把列表中的每一项内容,写入到文件中

lst = ["hello", "world", "i", "love", "you"]
f = open("good.txt", mode="w", encoding="utf-8") # 大多数情况下要把open写循环外面
for i in lst:
    f.write(i)
    f.write("\n")   # 换行符,将元素分行

f.close()

目标文件good.txt中出现了列表的每一个元素。
在这里插入图片描述

1.2.3 a:append 追加写入
f = open("good.txt", mode="a", encoding="utf-8")
f.write("all")
f.close()

在这里插入图片描述

1.3 with:上下文

1.3.1 用with打开文件
with open("good.txt", mode="r", encoding="utf-8") as f: # f = open()
    for line in f:
        print(line.strip())

使用with可以不用再每次完成操作后关闭文件,省去了f.close()

1.3.2 打开图片

在读写非文本文件的时候要加上b

with open("胡歌.jpeg", mode="rb") as f:
    for line in f:
        print(line)

返回结果还是字节,不能做编码操作
在这里插入图片描述

1.3.3 文件复制(到另一个文件夹)
with open("胡歌.jpeg", mode="rb") as file, \
    open("../first_lesson/huge.jpeg", mode="wb") as f2:
    for line in file:
        f2.write(line)
# \ 代表下面一行代码和上面一行代码是同一行代码

看看效果:
在这里插入图片描述

1.3.4 文件修改

文件修改逻辑:(过程足够快)

  1. 从源文件(source)中读取内容
  2. 在内存中进行调整(修改)
  3. 把修改后的内容写入新文件(new)中
  4. 删掉源文件(source)
  5. 将新文件(new)重命名为源文件(source)实现替换效果

尝试将人名单中的陈姓都替换为张
修改内容:

with open("人名单.txt", mode="r", encoding="utf-8") as f1, \
    open("人名单_副本.txt", mode="w", encoding="utf-8") as f2:
    for line in f1:
        line = line.strip()  # 去掉换行
        if line.startswith("陈"):
            line = line.replace("陈", "张")

        f2.write(line)
        f2.write("\n")

强调:
和操作系统相关的模块引入

import os

和时间相关的模块引入

import time

可以设置休眠时间,在文件资源管理器看到文件替换的过程

time.sleep(3)  # 让程序休眠3秒钟
# 删除源文件
os.remove("人名单.txt")
time.sleep(3)
# 把副本文件重命名成源文件
os.rename("人名单_副本.txt", "人名单.txt")
  • 42
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木逢春24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值