当前位置: 首页 > 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)分支判断和循环

http://www.lryc.cn/news/264630.html

相关文章:

  • 智能优化算法应用:基于饥饿游戏算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • leetCode算法—10. 正则表达式匹配
  • Android Studio 实现音乐播放器
  • 端口占用命令 netstat (centos)+netstat (windows)
  • Python-基于fastapi实现SSE流式返回(类似GPT)
  • iOS中宿主APP与录屏扩展进程数据传递方式
  • Windows系统下的可用RADIUS软件-[资源]
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十五:基础数据模块相关功能实现
  • MAC苹果笔记本电脑如何彻底清理垃圾文件软件?
  • 【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数
  • 【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022
  • Amazon Toolkit — CodeWhisperer 使用
  • Flink SQL填坑记2:Flink和MySQL的Bigdata类型不同导致ClassCastException报错
  • 本地MinIO存储服务如何创建Buckets并实现公网访问上传文件
  • 通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题
  • Backend - Django 项目创建 运行
  • C# .Net学习笔记—— Expression 表达式目录树
  • 《论文阅读28》Unsupervised 3D Shape Completion through GAN Inversion
  • 一个正则快速找到在ES中使用profile的时产生慢查询的分片
  • 链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)
  • Python tkinter控件全集之组合选择框 ttk.ComboBox
  • Axure之中继器的使用(交互动作reperter属性Item属性)
  • 数字化医疗新篇章:构建智能医保支付购药系统
  • 11_12-Golang中的运算符
  • k8s-ingress特性 9
  • 【redis】redis系统实现发布订阅的标准模板
  • Python 时间日期处理库函数
  • 第二十二章 : Spring Boot 集成定时任务(一)
  • 关于“Python”的核心知识点整理大全32
  • 【krita】实时绘画 入门到精通 海报+电商+装修+人物