【python基础知识】16.“古诗默写题”的python实现(文件读写和编码-实操篇)

2023-12-20 20:20

本文主要是介绍【python基础知识】16.“古诗默写题”的python实现(文件读写和编码-实操篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 练习介绍
    • 练习目标
    • 练习要求
  • 项目实操
    • 明确目标
    • 分析过程,拆解项目
      • 准备工作
      • 梳理思路
    • 代码实现,逐步执行
      • 【第1步-开】
      • 【第2步-读】
      • 【第3步-文件写入&逻辑判断】
      • 【第4步-关】
      • 完整代码:
      • 另一种写法:
    • 总结

前言

回顾一下之前学到的编码和文件读写。
不同的编码方式:
在这里插入图片描述
编码和解码:
在这里插入图片描述
读文件的三步骤:
在这里插入图片描述
写文件的三步骤:
在这里插入图片描述
不同的读写方式:
在这里插入图片描述

好了,复习到此结束,接下来一起来做项目吧!

练习介绍

练习目标

这个练习,会让你学会一种方法,可以直接修改原文件中的数据。

练习要求

语文老师将一些古诗存在txt文档里,一句一行。
最近,他计划抽一些古诗,自己设置一些空来让学生默写。
请你用代码帮老师完成这项工作(只要处理了一个文档,加上循环就能处理无数个文档了)。

项目实操

明确目标

我们以李商隐的《锦瑟》为例,这是原文档里的内容:

锦瑟
[] 李商隐锦瑟无端五十弦,
一弦一柱思华年。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。

老师在这首诗想考学生“一弦一柱思华年。”和“只是当时已惘然。”,即他想得到的是:

锦瑟
[] 李商隐锦瑟无端五十弦,
__。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
__。

分析过程,拆解项目

准备工作

先新建一个poem1.txt,然后将以下古诗内容复制到里面,并且保存,放到与.py文件同目录下。

锦瑟
[] 李商隐锦瑟无端五十弦,
一弦一柱思华年。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。

梳理思路

最终结果是要将“一弦一柱思华年。”和“只是当时已惘然。”这两句古诗用“__”来代替。
那首先我们就要能找到这两句古诗,所以思路如下:
1.找到poem1.txt文件
2.逐行读取该文件中的内容
3.逐行判断该行的内容是否是要找的两句古诗:“一弦一柱思华年。”和“只是当时已惘然。”如果是,就替换为“——”并写入poem2.txt文件,如果不是就原样写入test.txt文件.

代码实现,逐步执行

【第1步-开】

使用open()函数打开文件。

with open('poem1.txt', 'r', encoding='utf-8') as f:
  • open('poem1.txt', 'r', encoding='utf-8'):使用 open() 函数打开名为 poem1.txt 的文本文件。第一个参数是文件路径,第二个参数 'r' 表示以只读模式打开文件,第三个参数 'utf-8' 指定文件编码为 UTF-8。
  • with 语句:使用 with 打开文件,可以确保在操作完成后自动关闭文件,同时能够处理异常情况。

【第2步-读】

lines = f.readlines()
print(lines)
  • f.readlines():使用文件对象 freadlines() 方法,读取所有行,并将它们存储在一个列表 lines 中。
  • print(lines):打印读取到的内容,这里是文件的所有行。注意,输出的每一行都会带有换行符 \n

【第3步-文件写入&逻辑判断】

with open('test.txt', 'w', encoding='utf-8') as new:for line in lines:if line not in ['一弦一柱思华年。\n', '只是当时已惘然。\n']:new.write(line)else:new.write('____________\n')
  • open('test.txt', 'w', encoding='utf-8'):使用 open() 函数以写入模式打开名为 test.txt 的文件。第一个参数是文件路径,第二个参数 'w' 表示以写入模式打开文件(会覆盖原有内容),第三个参数 'utf-8' 指定文件编码为 UTF-8。
  • with 语句:使用 with 打开文件,确保在操作完成后自动关闭文件。
  • for line in lines::遍历 lines 列表中的每一行。
  • if line not in ['一弦一柱思华年。\n', '只是当时已惘然。\n']::检查当前行是否不等于给定的两行文本。
  • new.write(line):如果当前行不满足条件,则将其写入名为 new 的文件中。
  • else::如果当前行满足条件,则将 '____________\n' 写入文件中。

【第4步-关】

由于使用 with 打开文件,在操作完成后会自动关闭文件。无需再专门写关闭的代码。

完整代码:

with open ('poem1.txt','r',encoding='utf-8') as f:lines = f.readlines()  # 这时,lines 的数据存放在内存里。
print(lines)  # 将读取到的内容打印出来,发现实际上读到的是带换行符的字符串。
with open('test.txt','w',encoding='utf-8') as new:for line in lines:  # 在内存中,对数据进行处理,然后再写到文档里,覆盖之前的内容。if line not in ['一弦一柱思华年。\n','只是当时已惘然。\n']:  # 注意:这里的条件要根据上面打印出的数据写。new.write(line)else:new.write('____________\n')

这段代码的功能是将 poem1.txt 中的内容读取到内存中,进行处理后,再覆盖写入到 test.txt 文件中。具体处理方式是,如果某一行与给定的两行文本相等,则在 test.txt 中写入 '____________\n',否则直接将原始行写入 test.txt

另一种写法:

也可以将目标语句放到一个list中,在判断的时候,如果属于这个list,就替换为“____________”
代码如下:

list_test = ['一弦一柱思华年。\n','只是当时已惘然。\n']  # 将要默写的诗句放在列表里。
with open ('poem1.txt','r') as f:lines = f.readlines()
print(lines)
with open('test.txt','w') as new:for line in lines:if line in list_test:  # 属于默写列表中的句子,将其替换成横线。new.write('____________。\n')else:new.write(line)

总结

通过这个项目的实操,我们掌握并巩固了以下几个知识点:

  1. 文件操作:学习如何使用 Python 进行文件的读写操作。通过 open() 函数打开文件,使用 'r' 模式进行读取,使用 'w' 模式进行写入。

  2. 上下文管理器:学习如何使用 with 语句来打开文件。with 语句可以确保在操作完成后自动关闭文件,同时能够处理异常情况,提高代码的健壮性。

  3. 读取文件内容:学习使用 readlines() 方法从文件对象中读取所有行,并将其存储在一个列表中。这样可以方便地对文件内容进行处理和操作。

  4. 字符串比较和处理:学习如何对读取到的文本字符串进行条件判断和处理。在示例代码中,通过判断是否与给定两行文本相等,来决定是否写入 '____________\n' 或原始行到目标文件。

  5. 文件编码设置:学习如何设置文件的编码。示例中使用了 'utf-8' 编码,确保正确读取和写入包含非英文字符的文本。

通过理解和应用这些知识点,可以更好地处理和操作文本文件,扩展其对文件操作的基础能力。

总结为表格:
下面是使用 Markdown 格式总结这段代码可以学到的知识的表格:

知识点描述
文件操作学习如何使用 Python 进行文件的读写操作
上下文管理器学习如何使用 with 语句来打开文件,自动关闭文件,并处理异常情况
读取文件内容学习使用 readlines() 方法从文件对象中读取所有行,并存储在列表中
字符串比较处理学习如何对读取到的文本字符串进行条件判断和处理
文件编码设置学习如何设置文件的编码,以确保正确读取和写入包含非英文字符的文本

本节完美结束,撒花~希望大家多多练习,早日成为大神!

这篇关于【python基础知识】16.“古诗默写题”的python实现(文件读写和编码-实操篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517368

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合