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

【人生苦短,我学 Python】(8)文件的读写和过滤器

目录

  • 简述 / 前言
  • 1. 文件的操作
  • 2. 过滤器
    • 2.1 more —— 逐屏显示数据
    • 2.2 sort —— 排序
    • 2.3 more 和 sort 一起用
  • 文章传送门

简述 / 前言

上一篇我们介绍了 Python 的输入(input)和输出(print),以及如何通过命令行给程序传入参数。这篇文章就讲讲 Python 怎么读取我们的文件(比如 txt, excel 等),当然现在我们只用 Python 自带的模块和方法来介绍,后期我们还会讲一个数据处理经常用来操作表格的第三方库(pandas)。

1. 文件的操作

  • 通过内置函数 open()创建或打开文件对象;

    • 格式open(file, mode='r', buffering=-1, encoding=None)
    • 使用 open() 函数时,可以指定打开文件的模式 mode 为:‘r’(只读)、‘w’(写入,写入前删除旧内容)、‘x’(创建新文件,如果文件存在,则导致FileExistsError)、‘a’(追加)、‘b’(二进制文件)、‘t’(文本文件,默认值)、‘+’(更新,读写)
    • 特别要注意的是,当我们在读写文件的时候,最好配合异常机制一起写,即下面这段代码,关于异常处理会在之后介绍,这里仅仅有个印象即可!
      try:    # 这部分一定会执行的f = open("test.txt", mode='r')
      except: # 如果出现异常就会执行这段代码,否则跳过这段代码print(f'文件读取异常,未正确打开文件!')
      finally:    # 最终不管是否有异常,都会执行这段代码,确保关闭打开的文件f.close()
      
  • 通过文件对象的实例方法 write/writelines,可以写入字符串到文本文件;

  • 通过文件对象的实例方法 read/readline,可以读取文本文件的内容;

  • 文件读写完成后,应该使用 close 方法关闭文件。

例子1:读取当前代码文件。
编写代码,代码如下,文件名为:CSDN.py,这里不再用异常处理。

下面的代码像 whileif 看不懂可以跳过,这些会在下一篇文章介绍(之前忘了写这章的内容了…),所以只要看 open, close, readline 就可以了。

# !/usr/bin/env python3
# _*_ coding: utf-8 _*_ 
# @author:森林
# @time:2023/11/22 13:04import sysfilename = sys.argv[0]  # 所读取并输出的就是本程序文件CSDN.py
f = open(filename, 'r', encoding='utf-8')  # 打开文件
line_no = 0  # 统计行号
while True:line_no += 1  # 行号计数line = f.readline()  # 读取行信息if line:print(line_no, ":", line, end='')  # 输出行号和该行内容else:break
f.close()  # 关闭打开的文件

输出(在终端 terminal 输入 python CSDN.py):

D:\MyCode\Python_Code\PyCharm>python CSDN.py
1 : # !/usr/bin/env python3
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 : 
8 : filename = sys.argv[0]  # 所读取并输出的就是本程序文件CSDN.py
9 : f = open(filename, 'r', encoding='utf-8')  # 打开文件
10 : line_no = 0  # 统计行号
11 : while True:
12 :     line_no += 1  # 行号计数
13 :     line = f.readline()  # 读取行信息
14 :     if line:
15 :         print(line_no, ":", line, end='')  # 输出行号和该行内容
16 :     else:
17 :         break
18 : f.close()  # 关闭打开的文件

要是每次写 .close() 可能你会很烦,或者有时候忘记写了,这就麻烦大了,因此 Python 也提供了另外一种安全打开文件的方式(with 语句——能确保打开的文件自动关闭)!

语法with open(file, mode) as f:

# !/usr/bin/env python3
# _*_ coding: utf-8 _*_ 
# @author:森林
# @time:2023/11/22 13:04import sysfilename = sys.argv[0]  # 所读取并输出的就是本程序文件CSDN.py
line_no = 0  # 统计行号
with open(filename, 'r', encoding='utf-8') as f:  # 使用with语句实现上下文管理协议for line in f:line_no += 1  # 行号计数print(line_no, ":", line, end='')  # 输出行号和该行内容

输出(在终端 terminal 输入 python CSDN.py):

D:\MyCode\Python_Code\PyCharm>python CSDN.py
1 : # !/usr/bin/env python3
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0]  # 所读取并输出的就是本程序文件CSDN.py
9 : line_no = 0  # 统计行号
10 : with open(filename, 'r', encoding='utf-8') as f:  # 使用with语句实现上下文管理协议
11 :     for line in f:
12 :         line_no += 1  # 行号计数
13 :         print(line_no, ":", line, end='')  # 输出行号和该行内容

在 Python 中还有标准输入、输出、错误流、重定向、管道,但是基本上没怎么用过,所以这里就不进行介绍了。


2. 过滤器

2.1 more —— 逐屏显示数据

格式python 程序名字.py 参数1 参数1 ... 参数n | more

D:\MyCode\Python_Code\PyCharm>python CSDN.py | more
1 : # !/usr/bin/env python3
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0]  # 所读取并输出的就是本程序文件CSDN.py
9 : line_no = 0  # 统计行号
10 : with open(filename, 'r', encoding='utf-8') as f:  # 使用with语句实现上下文管理协议
11 :     for line in f:
-- More  --

每按一次 enter 都会多显示一行,显示完全部内容就会终止程序!

2.2 sort —— 排序

格式python 程序名字.py 参数1 参数1 ... 参数n | sort

D:\MyCode\Python_Code\PyCharm>python CSDN.py | sort
1 : # !/usr/bin/env python3
10 : with open(filename, 'r', encoding='utf-8') as f:  # 使用with语句实现上下文管理协议
11 :     for line in f:
12 :         line_no += 1  # 行号计数
13 :         print(line_no, ":", line, end='')  # 输出行号和该行内容
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0]  # 所读取并输出的就是本程序文件CSDN.py
9 : line_no = 0  # 统计行号

它会按照你输出的内容先进行排序再输出,比如这里是先按照第一位进行排序,所以先输出1开头的行,如果第一位相同,就看第二位,依次类推…

2.3 more 和 sort 一起用

D:\MyCode\Python_Code\PyCharm>python CSDN.py | sort | more
1 : # !/usr/bin/env python3                                                                                                                                                               
10 : with open(filename, 'r', encoding='utf-8') as f:  # 使用with语句实现上下文管理协议
11 :     for line in f:
12 :         line_no += 1  # 行号计数
13 :         print(line_no, ":", line, end='')  # 输出行号和该行内容
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
-- More  --

文章传送门

上一篇文章:【人生苦短,我学 Python】(7)命令行参数、键盘输入【input】和输出【print】
下一篇文章:【人生苦短,我学 Python】(9)分支判断和循环

相关文章:

【人生苦短,我学 Python】(8)文件的读写和过滤器

目录 简述 / 前言1. 文件的操作2. 过滤器2.1 more —— 逐屏显示数据2.2 sort —— 排序2.3 more 和 sort 一起用 文章传送门 简述 / 前言 上一篇我们介绍了 Python 的输入(input)和输出(print),以及如何通过命令行给…...

智能优化算法应用:基于饥饿游戏算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于饥饿游戏算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于饥饿游戏算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.饥饿游戏算法4.实验参数设定5.算法结果6.…...

leetCode算法—10. 正则表达式匹配

10.给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 难度:困难 *** 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹…...

Android Studio 实现音乐播放器

目录 一、引言 视频效果展示: 1.启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果 二、详细设计 1.登陆注册功能 2.音乐列表页面 2.音乐播放功能 三、源码获取 一、引言 Android初学者开发第一个完整的实例项目应该就属《音乐播放器…...

端口占用命令 netstat (centos)+netstat (windows)

linux 1.使用 netstat 命令查看端口占用情况 netstat -tlnp 使用 -p 选项查看进程信息。 使用 -t 选项列出 TCP 协议的连接:类似(使用 -u 选项列出 UDP 协议的连接:) 2.查找占用指定端口号的应用信息 netstat -tlnp | grep 3…...

Python-基于fastapi实现SSE流式返回(类似GPT)

最近在做大模型对话相关功能,需要将对话内容流式返回给前端页面(类似GPT的效果)。下面直接说下如何实现: 1.首先导入fastapi和sse流式返回所需要的包 from fastapi import APIRouter, Response, status from sse_starlette.sse …...

iOS中宿主APP与录屏扩展进程数据传递方式

背景 在iOS生态系统中,应用程序的功能不再局限于单一的宿主应用,而是可以通过扩展进程实现更丰富的用户体验和功能。其中一种引人注目的扩展是录屏功能,它使用户能够捕捉设备屏幕上的活动,无论是游戏过程、教育演示还是其他应用场…...

Windows系统下的可用RADIUS软件-[资源]

RADIUS协议相关原理介绍,可参考博客RADIUS协议原理介绍报文分析配置指导-RFC2865/RFC2866。 本文用于提供和介绍Window系统下几种可用的RADIUS软件。主要涉及软件有radius_ping(绿色免安装版)和WinRadius(绿色免安装版&#xff09…...

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十五:基础数据模块相关功能实现

一、本章内容 本章使用已实现的公共组件实现系统管理中的基础数据中的验证码管理、消息管理等功能。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址: 基于VUE3+Layui从头搭建通用后台管理系统合集-验证码功能实现 3.2 西瓜…...

MAC苹果笔记本电脑如何彻底清理垃圾文件软件?

苹果电脑以其流畅的操作系统和卓越的性能而备受用户喜爱。然而,随着时间的推移,系统可能会积累大量垃圾文件,影响性能。本文将介绍苹果电脑怎么清理垃圾文件的各种方法,以提升系统运行效率。 CleanMyMac X是一款专业的Mac清理软件…...

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022

前言 本文分享BEV感知方案中,具有代表性的方法:BEVFormer。 它基于Deformable Attention,实现了一种融合多视角相机空间特征和时序特征的端到端框架,适用于多种自动驾驶感知任务。 主要由3个关键模块组成: BEV Que…...

Amazon Toolkit — CodeWhisperer 使用

tFragment--> 官网:https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具,感慨颇多。下面是安装 和使用的分享。 CodeWhisperer,亚马逊推出的实时 AI 编程助手,是一项基于机器学习…...

Flink SQL填坑记2:Flink和MySQL的Bigdata类型不同导致ClassCastException报错

最近在开发Flink SQL的时候,需要关联Kafka事实表和MySQL维表,得到的数据写入Phoenix表中,但是其中有个字段,Kafka表、MySQL表和Phoenix表都是BigData类型,但是在实现的时候却报“java.math.BigInteger cannot be cast to java.lang.Long”异常,从报错信息来看,是由于Big…...

本地MinIO存储服务如何创建Buckets并实现公网访问上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…...

通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题

问题描述: 在最近的一个项目中,有一个存在较久,并且只在内部城域网可访问的一个使用Shiro框架进行安全管理的Java应用,该应用部署在Tomcat服务器上。起初,应用程序可以通过HTTP协议访问,一切运行都没…...

Backend - Django 项目创建 运行

目录 一、配置环境 二、创建 Django 项目 (一)新建文件夹 (二)打开文件夹 (三)打开运行终端 (四)创建基础项目 (五)创建app 1. 安装Django &#xf…...

C# .Net学习笔记—— Expression 表达式目录树

一、什么是表达式目录树 (1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的…...

《论文阅读28》Unsupervised 3D Shape Completion through GAN Inversion

GAN,全称GenerativeAdversarialNetworks,中文叫生成式对抗网络。顾名思义GAN分为两个模块,生成网络以及判别网络,其中 生成网络负责根据随机向量产生图片、语音等内容,产生的内容是数据集中没有见过的,也可…...

一个正则快速找到在ES中使用profile的时产生慢查询的分片

在es中使用profile分析慢查询的时候,往往因为分片过多,或者因为查询条件太复杂,分析的结果几十万行。在kibana上点半天,也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...

python打卡day49@浙大疏锦行

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...