三分钟带你了解Python文件操作与IO流

news2024/12/24 10:39:41

        在探索编程世界的奇幻旅程中,文件操作和IO(输入/输出)流是每一个探险者必须掌握的基础技能。在Python的世界中,这些技能尤为关键,它们像是巫师手中的魔杖,能让我们与文件进行深度的交流。本文将带你快速了解Python中的文件操作和IO流,通过大量的实例和代码,确保你能够自信地在Python的世界中畅游。

 

目录

一、Python文件操作基础

1. 打开文件

a. 文件模式

2. 关闭文件

b. 使用with语句

二、文件读写操作

1. 读取文件

a. 逐行读取

2. 写入文件

b. 写入多行

三、基础总结

四、IO流的高级操作

1. 缓冲区

a. 缓存策略

2. 文件定位

b. 定位策略

3. 文件锁定

c. 锁的类型

4. 文件状态检查

d. 信息类型

5. 环境与状态

e. 操作指令

五、实际应用举例

1. 记录程序运行日志

2. 读取配置文件

3. 文件内容加密与解密

六、总结


一、Python文件操作基础

1. 打开文件

        在Python的魔法世界里,open()函数就像是一把打开神秘大门的钥匙。你需要告诉这把钥匙门在哪里(文件路径)以及你想怎么打开它(模式)。

file = open('example.txt', 'r')

a. 文件模式

  • 'r': 这是一扇只能向内开的门,你只能往里看,不能做任何其他事情(只读模式)。
  • 'w': 如果你要进行翻新,这扇门就很适合,进去前它会清空一切,让你从零开始(写入模式)。
  • 'a': 这扇门背后是一个记忆宫殿,你可以在里面添加新的记忆,但不会忘记旧的(追加模式)。
  • 'x': 这是一个创造奇迹的模式,只有当你是第一个发现者时,才能进入(创建模式)。
  • 'b': 使用这个模式,你将在二进制的海洋中游泳,而不是在文本的沙滩上漫步(二进制模式)。
  • 't': 默认情况下,你在一个充满文字的图书馆中(文本模式)。

2. 关闭文件

        在探险结束后,及时关闭大门是很重要的,以防不速之客闯入。

file.close()

b. 使用with语句

        有一种魔法,能在你结束探险时自动关闭大门,那就是with语句。

with open('example.txt', 'r') as file:
    content = file.read()

二、文件读写操作

1. 读取文件

        在Python的世界中,read()方法就像是一把魔法钥匙,能够揭开文件内容的神秘面纱。你可以读取文件的一部分,也可以一次性读取整个文件。它提供了多种方式来适配不同的读取需求。

# 读取整个文件
content = file.read()
# 或者分块读取前100个字节
content = file.read(100)

a. 逐行读取

        如果文件是一本厚厚的历史书,那么逐行读取就像是一位细心的历史学家一页一页地翻阅,不放过任何一行珍贵的记录。

for line in file:
    print(line.strip())  # 去除每行末尾的换行符并打印

2. 写入文件

        在Python的创意工坊里,write()方法像是一瓶魔法墨水,它能将你的文本永久地刻画在文件的页面上。无论是简单的标记还是长篇大论,它都能轻松应对。

file.write('Hello, World!')  # 在文件中留下你的问候

b. 写入多行

        如果你是一位诗人,想要在文件中留下多行诗句,writelines()方法就像是一个能连续书写的魔法笔,帮你一气呵成。

lines = ['First line
', 'Second line
']
file.writelines(lines)  # 将列表中的每一句诗写入文件

三、基础总结

四、IO流的高级操作

1. 缓冲区

        在处理文件时,io模块就像是一套精密的机械装置,为文件操作提供了更多的控制和优化选项。通过设置缓冲区,可以显著提高大量数据读写的效率。

import io
buffered_file = io.BufferedWriter(file)  # 创建一个带有缓冲区的写入流

a. 缓存策略

  • io.DEFAULT_BUFFER_SIZE: 这是默认的机械装置大小,适合大多数情况。
  • io.BufferedReader: 为读取文件准备一个先进的机械装置,减少读取时的摩擦。
  • io.BufferedWriter: 为写入文件准备一个先进的机械装置,加速数据的注入。

2. 文件定位

    seek()方法就像是一把精准的尺子,它可以测量并移动你在文件中的位置。这把尺子非常灵活,能够精确地定位到文件的任何位置。

file.seek(0)  # 移动到文件的起点

b. 定位策略

  • file.tell(): 这把尺子还能告诉你当前的位置,让你随时掌握自己在哪。

3. 文件锁定

        在多人合作的数据编织中,fcntl模块提供了一种锁,就像是一种协议,确保同一时间只有一位编织者能够修改数据。

import fcntl
fcntl.flock(file, fcntl.LOCK_EX)  # 施加锁防
fcntl.flock(file, fcntl.LOCK_UN)  # 解锁

c. 锁的类型

  • os.O_SHLOCK: 一种共享的锁,允许多个编织者同时观察数据。
  • os.O_EXLOCK: 一种独占的锁,只允许一位编织者进行修改。

4. 文件状态检查

        在文件交易市场上,os.stat()函数就像是一位精明的商人,能够提供文件的大小、最后访问时间等重要信息。

import os
file_info = os.stat('example.txt')
print(file_info.st_size)  # 显示文件大小

d. 信息类型

  • st_size: 文件的大小,就像商人关心货物的体积一样。
  • st_mtime: 文件最后修改的时间,就像商人关心货物的新鲜度一样。

5. 环境与状态

        在文件操作系统的舞台上,os模块就像是幕后的导演,控制着文件和目录的演出。

import os
os.chmod('example.txt', 0o755)  # 更改文件权限
os.rename('example.txt', 'sample.txt')  # 重命名文件,就像更换角色的名字一样

e. 操作指令

  • os.chmod(): 改变文件的权限,就像导演决定角色的权限一样。
  • os.rename(): 改变文件的名称,就像导演更改角色的名字一样。

五、实际应用举例

        在Python的文件操作与IO流的探索中,我们已经掌握了打开、关闭、读写文件以及高级IO流操作的技能。现在,让我们将这些知识应用到一些实际的场景中,通过实战演练来巩固我们的魔法技能。

1. 记录程序运行日志

        假设你正在构建一个神奇的程序,它能够自动记录每次运行时的情况。我们可以使用文件操作来实现一个简单的日志功能。

import time

# 设置日志文件路径
log_file_path = 'program_log.txt'

# 写入当前时间作为日志的开头
with open(log_file_path, 'a') as log_file:
    log_file.write(f"Program started at {time.ctime()}
")

# 假设这里是程序运行的一些操作
# ...

# 程序运行结束,写入日志
with open(log_file_path, 'a') as log_file:
    log_file.write(f"Program ended at {time.ctime()}
")

2. 读取配置文件

        当你的程序需要从配置文件中加载一些设置时,文件读取操作就显得尤为重要了。假设我们有一个名为config.ini的配置文件,里面存储了一些程序运行所需的参数。

config_file_path = 'config.ini'

with open(config_file_path, 'r') as config_file:
    config_data = config_file.readlines()

# 假设配置文件的结构如下:
# key1=value1
# key2=value2
# key3=value3

config = {}
for line in config_data:
    key, value = line.strip().split('=')
    config[key] = value

print(config)

3. 文件内容加密与解密

        在处理敏感数据时,我们可能需要对文件内容进行加密和解密操作。这里我们简单演示如何将文件内容逐行加密和解密。

# 加密函数
def encrypt(content):
    return content.encode().hex()

# 解密函数
def decrypt(content):
    return content.decode().hex()

# 原始文件
original_file_path = 'secret.txt'
# 加密后的文件
encrypted_file_path = 'secret_encrypted.txt'

with open(original_file_path, 'r') as original_file:
    with open(encrypted_file_path, 'w') as encrypted_file:
        for line in original_file:
            encrypted_file.write(encrypt(line))

# 当我们需要使用时,再解密文件内容
with open(encrypted_file_path, 'r') as encrypted_file:
    with open(original_file_path, 'w') as original_file:
        for line in encrypted_file:
            original_file.write(decrypt(line.strip()))

        通过上述实例,我们可以看到Python中文件操作和IO流的强大功能,它们为我们提供了灵活处理文件数据的能力。无论是记录日志、读取配置文件还是加密解密文件内容,Python都能轻松应对。掌握这些技能,你将能够在编程世界中更加自如地驾驭文件和数据。

六、总结

        在这篇文章中,我们一起探索了Python中文件操作和IO流的奥秘,并通过实际的代码示例学习了如何有效地进行文件读写。记住,在处理文件时,合理使用缓冲区和锁定是非常重要的,这不仅能提高你的代码效率,还能保证数据的安全性和完整性。现在,你已经拥有了在Python世界中自由遨游的能力,去创造属于你的魔法吧!

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

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

相关文章

springboo 整合 redis

springBoot 整合 redis starter启动依赖。—包含自动装配类—完成相应的装配功能。 引入依赖 <!--引入了redis整合springboot 的依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis&…

泵浦光与斯托克斯光相遇耦合效应的matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1拉曼散射基础 4.2非线性耦合方程 5.完整程序 1.程序功能描述 泵浦光与斯托克斯光相遇耦合效应的matlab模拟与仿真. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &#xff0…

面试场景题系列--(2)短 URL 生成器设计:百亿短 URL 怎样做到无冲突?--xunznux

文章目录 面试场景题&#xff1a;短 URL 生成器设计&#xff1a;百亿短 URL 怎样做到无冲突&#xff1f;1. 需求分析2. 短链接生成算法2.1 自增法2.2 散列函数法2.3 预生成法 3. 部署模型3.1 其他部署方案 4. 设计4.1 重定向响应码4.2 短 URL 预生成文件及预加载4.3 用户自定义…

redis 基础命令

1.数据库命令 select 库名&#xff1b;切换库 flushdb 清空库 flushall 清空所有库 redis支持的数据类型有很多&#xff0c;使用最频繁的有String 字符串类型&#xff0c;List队列&#xff0c;Hash&#xff0c;Zset有序集合&#xff0c;Set集合。 2.字符串类型命令 表示k…

[IMX6ULL]移植NXP Linux Kernel 5.15

移植NXP Linux Kernel 5.15 2024-7-7 hongxi.zhu 1. 下载NXP Linux Kernel 5.15 仓库[nxp-imx/linux-imx] git clone -b lf-5.15.y https://github.com/nxp-imx/linux-imx.git 2. 编译NXP Linux Kernel 5.15 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean make…

细说MCU用DMA改变DAC输出信号频率和改善输出波形质量的方法

目录 一、参考硬件 二、修改定时器参数改变输出波形频率 三、改善波形质量 四、代码修改 五、查看结果 一、参考硬件 本项目的软件硬件工程参考作者的其他文章&#xff1a;细说MCU用DMA实现DAC输出的方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/14065…

2024暑假友谊赛 2

Problem - 1150B - Codeforces 小C是重度强迫症晚期患者&#xff0c;如果某些图形无法按照他的想法排列&#xff0c;那么他就会迎来他的末日。某天小C来到了心心念念的女神家里&#xff08;绝对不可能是女装大佬&#xff0c;绝对不可能&#xff09;&#xff0c;他发现地砖有两…

醒醒,别睡了...讲《数据分析pandas库》了—/—<2>

废话不多说&#xff0c;直接开讲! 一、 1、pandas变量类型的转换 Pandas 支持的数据类型 &#xff1a; 1、float&#xff1a;浮点型 2、int&#xff1a;整型 3、string&#xff1a;字符串类型 4、bool&#xff1a;布尔类型 5、datetime64[nsr]&#xff1a; 示精确到纳秒的日期…

跨棒距、公法线和齿厚对应关系分析

前面有一期讨论了下滚齿径向进刀量和齿厚的对应关系&#xff1a;《》&#xff0c;有小伙伴又问了&#xff0c;加工时是用跨棒距或者公法线去控制齿厚的&#xff0c;直接给齿厚是无法测量的&#xff0c;如果测一个值再去计算&#xff0c;有点麻烦&#xff0c;有没有他们之间的对…

【操作系统】解析线程安全中的 Synchronized 关键字

目录 synchronized一、互斥性二、可重入性三、synchronized的使用 synchronized synchronized作为确保多线程安全的重要关键字 接下来我们来学习它的特性&#xff1a; 互斥性可重入性 一、互斥性 synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,其他…

【详谈】HashMAP深度剖析,全面消化吸收

【万字长文】 还没写完!!还没写完!!!还在码字中,只是先放上,防止又写着没了,自己文件没了… 最近,可以说的上自己博客停更大约有一两个月了,一直在忙于公司中的项目和业务,典型的牛马看了都流泪 今天,自己刚刚优化了一个查询耗时的BUG,在这里我就引入的hashmap作为我存储队列的…

Linux 某进程 CPU 高问题,用 Shell 脚本发现处理

发现高CPU使用率进程 首先&#xff0c;我们需要编写一个Shell脚本来发现系统中CPU使用率最高的进程。以下是一个简单的脚本示例&#xff1a; #!/bin/bash# 设置 CPU 使用率的阈值,一般设置90&#xff1b;这里是demo&#xff0c;所以用30 CPU_THRESHOLD30# 获取占用 CPU 最高的…

学习笔记 韩顺平 零基础30天学会Java(2024.7.24)

P416 匿名内部类本质 IA tiger new IA(){//IA是一个接口 //重写 System.out.println(“老虎叫唤。。。”); } P417 匿名内部类使用 基于类的匿名内部类 Father father new father(“jack”){};//不带大括号运行类型是Father&#xff0c;带大括号就是匿名内部类,相当于是匿名…

【深度学习入门】安装conda/miniconda、所需包类、CUDA与conda/Miniconda间的关系

深度学习入门 须知 本教程跟随李沐老师课程随笔&#xff0c;课程链接点击此处。 CUDA和Anaconda的关系 CUDA Toolkit是由Nvidia官方提供的完整工具包&#xff0c;其中提供了Nvidia驱动程序、开发CUDA程序相关的开发工具包等。 Anaconda在安装Pytorch等会用到的CUDA的框架时…

操作系统(三)中断----软中断

软中断与硬中断很像 软中断是纯软件实现的&#xff0c;宏观效果看上去和中断差不多的一种方式。 什么叫宏观效果呢&#xff1f;意思就是说&#xff0c;中断在宏观层面看来&#xff0c;就是打断当前正在运行的程序&#xff0c;转而去执行中断处理程序&#xff0c;执行完之后再返…

【Python机器学习】使用Matplotlib注解绘制树形图

通过数据集可以创建树&#xff0c;但是字典的表示形式非常不易于理解&#xff0c;而且直接绘制图形也比较困难。但是通过Matplotlib库可以绘制树形图。 决策树的主要优点就是直观、易于理解&#xff0c;如果不能将其直观的显示出来&#xff0c;就无法发挥其优势。 Matplotlib…

y=λsin(πx)分岔的研究

使用如下的迭代格式&#xff0c;λ为可变的参数 用如下代码对收敛的λ的值进行探究&#xff0c;这里的r代表λ %通过观察是否凝聚在同一个点来判断是否收敛 clear;clf; axis([0,4,0,4]); grid; hold on for r0:0.3:3.9x[0.1];for i2:150x(i)r*sin(pi*x(i-1));endpause(0.5);fo…

心动小站Ⅶ--人工智能的虚假承诺

前言 1770 年&#xff0c;匈牙利作家兼发明家 Wolfgang von Kempelen 推出了一款名为“土耳其机器人”的自动国际象棋机器。该机器在欧洲各地展示了其自动化国际象棋大师技能&#xff0c;在与人类对手的比赛中频频获胜。据说它甚至击败了拿破仑和本杰明富兰克林等著名人物。土…

Prometheus之数据类型和函数

前言&#xff1a; 在了解Prometheus数据类型前&#xff0c;我们先了解下面几个统计学名词概念&#xff1a; 平均数&#xff08;Mean&#xff09;&#xff1a; 平均数是所有数据加起来除以数据个数得到的结果。它表示数据的中心趋势。 最大值&#xff08;Maximum&#xff09…

Hadoop集群安装配置

文章目录 Hadoop部署配置集群配置历史服务器配置日志的聚集分发Hadoop群起集群Hadoop群起脚本 准备工作&#xff1a;需要3台虚拟机&#xff0c;每台虚拟机搭建好JDK并配置环境变量 Hadoop部署 1&#xff09;集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安…