python基础----06-----文件读写追加操作

news2024/11/22 18:24:01

一 文件编码概念

思考:计算机只能识别: 0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?
答案:使用编码技术(密码本)将内容翻译成0和1存入。

在这里插入图片描述

常见编码有UTF8,gbk等等。不同的编码,将内容翻译成不同的二进制。

二 文件的操作

2.1 open函数

open(namme, mode, encoding)
'''
open作用:创建或者打开一个文件。文件不存在时会创建,存在时则打开。
参数name:要创建或者打开的文件路径。
参数mode:要打开文件的模式。可以是r,w,a,即依次是只读,只写,追加。
参数encoding:以何种编码格式打开文件。
'''

在这里插入图片描述

mode常用的三种基础访问模式:
在这里插入图片描述

2.2 读操作相关方法

读操作相关方法:主要有read和readlines方法。
在这里插入图片描述

2.2.1 测试读文件操作

先把以下内容保存到”测试.txt“中。

你是谁,我是预言家,请不要把我投出局
这把游戏我验到3号是狼人,大家请相信我,
一起把3号投出去。

测试:read()。

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")
    # f是一个文件对象
    print(type(f))  #<class '_io.TextIOWrapper'>

    # 读取文件-read
    print(f"读取10个字节的结果:{f.read(10)}")
    # 这里讲错了,open创建对象分字符和字节的,以字符方式打开文件时,num表示字符数,否则utf-8里常见汉字一个3byte
    print(f"读取10个字节的结果:{f.read(4)}")
    print(f"读取10个字节的结果:{f.read()}")

    # 关闭文件
    f.close()

结果:
在这里插入图片描述

测试:readlines()。

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")

    # 读取文件 - readLines()
    lines = f.readlines()
    # 读取文件的全部行,封装到列表中
    print(f"lines对象的类型: {type(lines)}") #<class 'list'>
    print(f"lines对象的内容是: {lines}") #这次就可以了   \n是换行符

    # 关闭文件
    f.close()

结果:
在这里插入图片描述

测试:readline()。

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")

    # 读取文件- readline()
    line1 = f.readline()
    line2 = f.readline()
    line3 = f.readline()
    print(f"第一行数据是:{line1}")
    print(f"第二行数据是:{line2}")
    print(f"第三行数据是:{line3}")

    f.close()

结果:
在这里插入图片描述

for循环读取:

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")

    # 读取文件- readline()
    # for循环读取文件行
    for line in f:
        print(f"每一行数据是:{line}")

    f.close()

在这里插入图片描述

2.2.2 为什么要关闭文件?

在这里插入图片描述

利用with open语句 自动运行close 以免忘写.

if __name__ == '__main__':
    # with open 语法操作文件
    with open("测试.txt", "r", encoding = "UTF-8") as f:
        for line in f:
            print(f"每一行数据是: {line}")

在这里插入图片描述

2.2.3 文件读操作汇总

在这里插入图片描述

2.2.4 文件读取练习-统计文件中某个单次的出现个数

在”word.txt“输入内容:

guangzhou shenzhen jiangmen
suzhou hangzhou wuhan
hanzhou guangzhou ningbo
guangzhou changshan xiamen

我们统计guangzhou的单次出现个数。

if __name__ == '__main__':
    f = open("word.txt", "r", encoding="UTF-8")
    nums = 0
    for line in f:
        nums += line.count("guangzhou")

    print("里面有 ", nums, " 个guangzhou")

在这里插入图片描述

2.3 文件的写出操作

在这里插入图片描述
注意,上图f.flush()之后仍要f.close()关闭文件。
并且,如果文件存在,将会把文件内部的内容清空,在文件开头重新写入。

if __name__ == '__main__':

    f = open("123.txt", "w", encoding="UTF-8")#当文件不存在时。它会给我自动创建
    # write写入
    f.write("Helloworld!")
    
    # flush刷新
    f.flush()
    
    # close内置了flush的功能,所以当内容不急着写入磁盘时,可以不调用flush,让close()进行处理.
    f.close()
    

得到123.txt,内容:
在这里插入图片描述

2.4 文件的追加写入操作

在这里插入图片描述
注意,上图f.flush()之后仍要f.close()关闭文件。

if __name__ == '__main__':

    f = open("123.txt", "a", encoding="UTF-8")#当文件不存在时。它会给我自动创建
    # write写入
    f.write("我是追加的内容")

    # flush刷新
    f.flush()

    # close内置了flush的功能
    f.close()

结果:
在这里插入图片描述

文件不存在时,追加模式(a)同样自动创建文件,这里就不演示了。

2.5 文件的综合案例

有一份账单文件,记录了消费收入的具体记录,内容如下:

name,date,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,100000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
刘德滑,2022-01-01,100000,消费,正式
刘德滑,2022-01-02,100000,消费,测试
刘德滑,2022-01-03,100000,消费,正式

先将上面账单内容保存到文件bill.txt。

需求(下图的需求可能有点不清晰,这里整理一下表达):将bill.txt的内容备份到bill.txt.bak,并且备份的时候,我们把测试的内容丢弃,不能写入到bill.txt.bak里面。
在这里插入图片描述

if __name__ == '__main__':

    f = open("bill.txt", "r", encoding="UTF-8")
    fw = open("bill.txt.bak", "a", encoding="UTF-8")
    for line in f:
        line = line.strip()# 去掉开头结尾的换行符
        split_list = line.split(",")
        if split_list[-1] == "测试":
            continue

        fw.write(line)
        fw.write("\n")# 补上换行符,因为上面line.strip()去掉了.

    # 关闭文件
    f.close()
    fw.close()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/617421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vulnhub靶场之DC-3渗透教程(Joomla CMS)

目录 0x01靶机概述 0x02靶场环境搭建 0x03主机发现 0x04靶场渗透过程 ​ 0x05靶机提权 0x06渗透实验总结 0x01靶机概述 靶机基本信息&#xff1a; 靶机下载链接https://download.vulnhub.com/dc/DC-3-2.zip作者DCAU发布日期2020年4月25日难度中等 0x02靶场环…

【Flink】DataStream API使用之输出算子(Sink)

输出算子&#xff08;Sink&#xff09; Flink作为数据处理框架&#xff0c;最终还是需要把计算处理的结果写入到外部存储&#xff0c;为外部应用提供支持。Flink提供了很多方式输出到外部系统。 1. 连接外部系统 在Flink中我们可以在各种Fuction中处理输出到外部系统&#xf…

C#读写参数到APP.Config

C#读写参数到APP.Config 介绍程序Demo常见错误 介绍 系统在开发时&#xff0c;可能需要设置默认参数&#xff0c;比如数据库的链接参数&#xff0c;某个参数的默认数据等等。对于这些数据&#xff0c;可直接在app.config中读取。 在读写时&#xff0c;需要先了解configuratio…

echo命令在Unix中的作用以及其常见用法

在Unix系统中&#xff0c;"echo"是一个常用的命令&#xff0c;用于在终端或脚本中输出文本。它可以将指定的字符串或变量的值打印到标准输出&#xff0c;从而向用户提供信息或进行调试。 本文将详细介绍"echo"命令在Unix中的作用以及其常见用法。 基本语法…

Keras-3-实例1-二分类问题

1. 二分类问题 1.1 IMDB 数据集加载 IMDB 包含5w条严重两极分化的评论&#xff0c;数据集被分为 2.5w 训练数据 和 2.5w 测试数据&#xff0c;训练集和测试集中的正面和负面评论占比都是50% from keras.datasets import imdb(train_data, train_labels), (test_data, test_l…

UE5 Chaos破碎系统学习1

在UE5中&#xff0c;Chaos破碎系统被直接进行了整合&#xff0c;本篇文章就来讲讲chaos的基础使用。 1.基础破碎 1.首先选中需要进行破碎的模型&#xff0c;例如这里选择一个Box&#xff0c;然后切换至Fracture Mode&#xff08;破碎模式&#xff09;&#xff1a; 2.点击右侧…

JAVA实现打字练习软件

转眼已经学了一学期的java了&#xff0c;老师让我们根据所学知识点写一个打字练习软件的综合练习。一开始我也不是很有思路&#xff0c;我找了一下发现csdn上关于这个小项目的代码也不算很多&#xff0c;所以我最后自己在csdn查了一些资料&#xff0c;写了这么一个简略版本的打…

【C++】——list的介绍及模拟实现

文章目录 1. 前言2. list的介绍3. list的常用接口3.1 list的构造函数3.2 iterator的使用3.3 list的空间管理3.4 list的结点访问3.5 list的增删查改 4. list迭代器失效的问题5. list模拟实现6. list与vector的对比7. 结尾 1. 前言 我们之前已经学习了string和vector&#xff0c…

Remix IDE已支持Sui Move在线开发

网页版Remix IDE与WELLDONE Code插件结合&#xff0c;让您无需本地设置或安装即可开始构建Sui应用程序。 不熟悉Sui的构建者可能想在正式配置开发环境之前&#xff0c;浅尝一下构建Sui应用程序。Remix IDE与WELLDONE Code插件组合&#xff0c;即可帮助构建者实现从浏览器窗口开…

JavaScript函数的增强知识

函数属性和arguments以及剩余参数 函数属性name与length ◼ 我们知道JavaScript中函数也是一个对象&#xff0c;那么对象中就可以有属性和方法。 ◼ 属性name&#xff1a;一个函数的名词我们可以通过name来访问&#xff1b; // 自定义属性foo.message "Hello Foo"…

Nginx 之 Tomcat 负载均衡、动静分离

一.详细安装及操作实例&#xff08;Nginx 七层代理&#xff09; 首先至少准备三台服务器 Nginx 服务器&#xff1a;192.168.247.131:80 Tomcat服务器1&#xff1a;192.168.247.133:80 Tomcat服务器2&#xff1a;192.168.247.134:8080 192.168.247.134:80811.部署Nginx 负载均…

微信自动回复怎么设置呢?

友友们 你们是否有以下这些烦恼 1、每天要手动点击“添加”按钮多次以通过大量好友? 2、你是否经常需要在多个微信帐号之间来回切换&#xff1f; 3、你的回复速度慢&#xff0c;导致客户流失率高&#xff1f; 4、为了及时回复&#xff0c;你总是需要带着多部手机出门&…

二十一、C++11(中)

文章目录 一、左值&右值&#xff08;一&#xff09;基本概念1.左值是什么2.右值是什么 &#xff08;二&#xff09;左值引用和右值引用1.左值引用2.右值引用 二、右值引用使用场景和意义&#xff08;一&#xff09;引入&#xff08;二&#xff09;左值引用的使用场景&#…

Linux编译器(gcc/g++)调试器gdb项目自动化构建工具(make/Makefile)版本管理git

Linux编译器-gcc/g&&调试器gdb&&项目自动化构建工具-make/Makefile&&版本管理git &#x1f506;gcc/g的使用可执行文件的"生产"过程gcc如何完成预处理编译汇编链接 函数库函数库一般分为静态库和动态库两种静态C/C库的安装 gcc选项gcc选项记…

WPF 学习:如何照着MaterialDesign的Demo学习

文章目录 往期回顾对应视频资源如何照着wpf项目学习找到你想要抄的页面查找对应源码演示示例如何认清页面元素抄袭实战 项目地址总结 往期回顾 WPF Debug运行是 实时可视化树无效&#xff0c;无法查看代码 WPF MaterialDesign 初学项目实战&#xff08;0&#xff09;:github …

【Java】线程池的概念及使用、ThreadPoolExecutor的构造方法

什么是线程池为什么用线程池JDK提供的线程池工厂模式如何使用 自定义线程池ThreadPoolExecutor类的构造方法工作原理拒绝策略 线程池的使用 什么是线程池 在之前JDBC编程中&#xff0c;通过DataSource获取Connection的时候就已经用到了池的概念。这里的池指的是数据库连接池。…

Vue电商项目--uuid游客身份获取购物车数据

uuid游客身份获取购物车数据 获取购物车列表 请求地址 /api/cart/cartList 请求方式 GET 参数类型 参数名称 类型 是否必选 描述 无 无 无 无 返回示例 成功&#xff1a; { "code": 200, "message": "成功", "…

马尔萨斯 ( Malthus)人口指数增长模型Logistic 模型

3.要求与任务 从 1790 — 1990 年间美国每隔 10 年的人口记录如下表所示&#xff1a; 用以上数据检验马尔萨斯 ( Malthus)人口指数增长模型&#xff0c;根据检验结果进一步讨论马尔萨斯 人口模型的改进&#xff0c;并利用至少两种模型来预测美国2010 年的人口数量。 提示 1 &…

自学黑客(网络安全),一般人我还是劝你算了吧

作为从16年接触网络安全的小白&#xff0c;谈谈零基础如何入门网络安全&#xff0c;有不对的地方&#xff0c;请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 后续我也会陆续的整理网络安全的相关学习资料及文章&#xff0c;与大家一…

数据结构与算法练习(三)二叉树

文章目录 1、树2、二叉树3、满二叉树4、完全二叉树5、二叉树的遍历&#xff08;前序、中序、后序&#xff09;二叉树删除节点或树 6、顺序存储二叉树顺序存储二叉树遍历&#xff08;前序、中序、后序&#xff09; 7、线索化二叉树中序线索二叉树前序线索二叉树后序线索二叉树 1…