python-(4-6)数据类型的应用(文件操作)

一. 读取文本文件内容

首先在当前python文件所在目录下创建一个文件名为test的测试文件
里面的内容是

1.我喜欢唱、跳、rap、篮球
2.我喜欢唱、跳、rap、篮球
3.我喜欢唱、跳、rap、篮球

该test文件与main.py的python在同一个目录下
`

在这里插入图片描述

1. 简单读取文件

然后执行下列代码:

f = open("test", mode="r", encoding="utf-8")
content = f.read()
print(content)

打开一个文件要用到open("文件名",mode="r",encoding=“使用的编码方式”)

首先文件名可以选择相对路径或绝对路径:
相对路径是相对于当前文件而言,某文件的所在位置
绝对路径是从某盘开始的详细文件路径(Windows),或者从根目录开始(Linux)。

其次,mode表示对文件所采取的权限,r表示读取,即read的缩写

最后,encoding表示使用utf-8的字符集编码。

执行代码结果如下:
在这里插入图片描述

2. 按行读取文件

在这里插入图片描述

通过readline()我们可以一行一行的读取文件中的数据内容。但是执行上述代码后,根据结果我们发现,每打印一行内容,都空了一行,然后才输出下一行内容。
这是因为在文件中,每句话的末尾隐藏了一个换行符;然后print()自身也带有换行符,
因此最后的打印效果就是每段内容中间都间隔一行。

如果不想有换行,可以通过strip()取消,它的作用是去掉字符串左右两端的空白,包括空格、换行、制表符
这个知识点在前文提到过:python-(4-1)数据类型的应用(int、float、bool、字符串)

:

3. 读取全文内容,并将其放在列表中

在这里插入图片描述

此处可以看到,每行内容后面的确有一个换行符\n

4. 最重要的读取文件的方式–for循环

在这里插入图片描述

二. 在文件中写入数据

1. 写入数据

直接执行下列代码
如果没有test01文件,就可以创建一个,在当前目录下,文件名为test01的文件
如果有test01文件,就会清空该文件中的内容

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

同理,此处的w就是write的缩写

然后向文件中写入你好,朋友

f.write("你好,朋友")

文件中就会存在该内容。

最后记得关闭文件(只要使用了open(),不管是读还是写,都记得关闭文件)

f.close()

2. 追加写

紧接着上述文件test01的内容,增加一行内容你真棒

f = open("test01", mode="a", encoding="utf-8")
f.write("你真棒")
f.close()

会在文件内容的末尾继续增加,而不是另起一行
同理,a就是append的缩写

3. 案例练习

要求:存在列表list = ["张三", "李四", "王五"],将这些人名写入文件test02

list = ["张三", "李四", "王五"]

# 创建准备写的文件
f = open("test02", mode="w", encoding="utf-8")

# 遍历列表的所有名字
for name in list:
    
    # 在文件中写入列表的名字
    f.write(name)

    # 写完后换下一行
    f.write("\n")

# 关闭文件
f.close()

4. 使用with...as...读取或写入文件

使用上述的语法打开文件,会经常忘记关闭文件。
为了省略f.close()这一关闭文件的步骤,可以用另一种格式打开文件。

with open("test", mode="r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

三. 读取非文本文件

在当前目录下载了一个图片,希望能够读取

with open("sky.webp", mode="rb") as f:
    for line in f:
        print(line)

其中mode中的b是bytes字节,表示读取到的是非文本文件

四. 复制一个图片到其他目录下

复制一个文件的本质是:先从源文件中读取内容,再将其写到新的路径下

with open("sky.webp", mode="rb") as f1, \
     open("venv\sky2.webp",mode="wb") as f2:
     for line in f1:
         f2.write(line)

注意:第一行代码最后的反斜杠表示,该行内容没有写完,它与下一行的代码在逻辑上是一行内容,只不过在此处为了美观我们将这一行代码分割成了两行。

python的解释器执行代码是一行一行向下执行的,所以我们才会用到上述的反斜杠\

五. 修改文件的内容

需求:本目录下有一个包含人名的文件test03,要将所有姓的人的姓换成
文件test03中的内容如下:

杨过
郭靖
周伯通
周星驰
周杰伦
周树人
刘德华

思路:循环遍历每个人名,将修改后的内容其放在新生成副本文件中,再删除原文件,把副本文件重命名。

代码:

# 导入操作系统相关的模块
import os
import time

# 打开并读取test03,创建并准备写入test03.bak
with open("test03", mode="r", encoding="utf-8") as f1, \
     open("test03.bak", mode="w", encoding="utf-8") as f2:
    
    # 遍历test03文件
    for line in f1:
        
        # 将读取的文件内容进行处理,中间没有空行
        line = line.strip()
        
        # 如果是姓周的
        if line.startswith("周"):
            
            # 由于字符串不可改变,所以需要在字符串替换时重新赋值给新变量
            line = line.replace("周", "赵")
            
        # 将修改后的内容写入test03.bak
        f2.write(line)
        
        # 每写完一行,转行新起一行 
        f2.write("\n")


# 利用time模块,程序休眠3秒钟(直观的看到test03.bak的创建和重命名)
time.sleep(3)

# 利用os模块,删除原来的test03文件
os.remove("test03")

# 利用time模块,程序休眠3秒钟
time.sleep(3)

# 利用os模块,将test03.bak的文件名修改为test03
os.rename("test03.bak", "test03")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值