Python基础—文件操作

news2024/11/19 14:45:12

Python基础—文件操作

文件操作

文件是指为了重复使用或长期使用的目的,以文本或二进制形式存放于外部存储器(硬盘、U盘、光盘等)中的数据保存形式,文件是信息交换的重要途径,也是利用程序解决实际问题的重要媒介。

程序对数据读取和处理都是在内存中进行的,程序设计结束或关闭后,内存中的这些数据也会随之消失。计算机文件可以将数据长期存储下来反复使用,不会因程序结束或断电而消失。

程序可以随时读取文件里的全部或部分数据,数据的处理结果写入文件后,可以长期保存,供其他程序的应用随时读取和处理。而且,文件的使用,还可以消除计算机内存对数据体积的限制,可以处理远超过内存大小的数据量。

本章和下一章节将详细讲授利用程序创建、打开与关闭文件的方法,通过案例讲授文本文件、CSV格式文件和JSON格式文件的读写操作,以及利用numpy和pandas库读取文件中的数据并对数据分进分析与统计的方法。

文件

为了长期保存、重复使用
以文本或二进制形式
存放于外部存储器中的数据保存形式

二进制文件

数据以二进制的形式存储
需要特定的应用软件打开和运行
图片文件(jpeg)、视频文件(mpeg)、
Windows下的可执行文件(exe)

在这里插入图片描述
文本文件

中西文字符、数字、标点等符号
文本编辑器打开,可直接阅读
文本文件(txt)、逗号分隔值(csv)、
日志文件(log)、配置文件(ini)等
CR:Carriage Return,\r,回车
LF:Linefeed,\n,换行

在这里插入图片描述

文件操作

文件的打开:

将文件以文本形式或二进制形式打开
用于读或写操作
open(file, mode=‘r’, encoding=None)

file 参数是一个带路径的文件名,字符串
open(file, mode=‘r’, encoding=None)
f = open(‘D:\test\temp.txt’)
f = open(‘./data/temp.txt’)
相对路径是相对当前打开文件位置的路径
f = open(‘temp.txt’)
文件与程序在相同文件夹下时可不加路径
绝对路径是从根目录开始的完整路径

mode 可选参数,指定文件打开的方式和类型
缺省时使用默认值’r’,以只读方式打开
open(file, mode=‘r’, encoding=None)
f = open(‘temp.txt’)
f = open(‘temp.txt’, ‘r’)

open(file, mode=‘r’, encoding=None)
f = open(‘temp.txt’, ‘w’)
'w’以写数据模式打开文件
若文件已存在,先清除该文件中所有内容
若文件不存在,先创建该文件再打开

open(file, mode=‘r’, encoding=None)
f = open(‘temp.txt’, ‘a’)
'a’以追加写数据模式打开文件
若文件已存在,新数据追加在现有数据之后
若文件不存在,先创建文件后在打开

open(file, mode=‘r’, encoding=None)
f = open(‘temp.txt’, ‘x’)
'x’以创建文件写数据模式打开文件
若文件已存在,打开失败
避免误操作覆盖现有文件

open(file, mode=‘r’, encoding=None)
f = open(‘temp.txt’, ‘rt’)
't’以文本模式打开文件处理数据(默认模式)
f = open(‘temp.txt’, ‘rb’)
'b’以二进制模式打开文件处理数据

open(file, mode=‘r’, encoding=None)
f = open(‘temp.txt’, ‘r+’)
‘+‘打开文件并允许更新
相当于增加读或写模式
f = open(‘temp.txt’, ‘w+’)
f = open(‘temp.txt’, ‘a+’)
与’r’、‘w’ 或’a’ 组合使用
'r+'可读可写、'w+'可写可读、'a+'可追加写可读

文件的遍历

open(file, mode=‘r’, encoding=None)
返回一个可遍历的文件对象
可以遍历访问文件中的数据
每个循环获得文件中的一行数据
行末有一个换行符’\n’

f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line)

文件的遍历

open(file, mode=‘r’, encoding=None)
返回一个可遍历的文件对象
可以遍历访问文件中的数据
每个循环获得文件中的一行数据
行末有一个换行符’\n’

在这里插入代码片f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())

文件的关闭

f.close()
文件使用完毕必须关闭文件对象
以确保对文件中数据的所有改变都写回到文件中
释放文件的读写权限,使其他程序可以操作该文件

f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())
f.close()

文件的关闭

f.close()
忘记关闭文件或程序在执行f.close()语句之前遇到错误,
导致文件不能正常关闭

f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())
f.write('杜甫') # 无写权限,操作将失败
f.close() 
# 程序未关闭时,文件一直处于打开状态

文件的关闭-异常处理

import io
try:
f = open('8.1 静夜思.txt', 'r', encoding='utf-8')
for line in f:  
print(line.strip()) 
f.write('杜甫')        
except io.UnsupportedOperation:
print('缺少写权限')
finally:
f.close()   # 无论是否异常语句都会执行

上下文管理器
文件打开操作置于“with … as”管理的上下文管理器中
不需要用f.close()显式的关闭文件
离开缩进代码范围,自动关闭文件对象

with open('静夜思.txt', 'r', encoding='utf-8') as f:
for line in f: 
print(line.strip()) 
print(f.closed)            
# False,缩进中打开状态
print(f.closed)                
# True,关闭状态

文件的读取操作

file.read()
file.readline()
file.readlines()
file.seek()
file.tell()

file.seek(offset)
用于移动文件指针到指定的位置
当指针移动到文件结尾后,读不到数据
可使用seek(0) 将文件读取指针移动到起始处

with open('静夜思.txt','r',encoding='utf-8') as f:
print(*f)  # 输出全部数据,指针移到末尾
print(list(f)) # 文件对象转列表输出,空列表[]
f.seek(0)   # 指针移到开始处
print(list(f)) 
# ['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。\n']

file.read(size=-1)
从文本文件中读取并返回最多size 个字符
当size 为负值或值是None 时,从当前位置读到结尾
若文件大于可用内存,可以反复调用read(size) 方法读取

with open('静夜思.txt', 'r', encoding='utf-8') as f:
txt = f.read(17)  # 读前17个字符
print(txt)        
# '静夜思\n床前明月光,疑是地上霜。\n'
txt = f.read()    # 读取文件中的全部剩余数据
print(txt)        
# '举头望明月,低头思故乡。\n'

file.readline(size=-1)
每次只读取一行数据,文件指针移动到下一行开始
如果指定了size ,将在当前行读取最多size 个字符

with open('静夜思.txt', 'r', encoding='utf-8') as f:
txt = f.readline()    # 读一行字符
print(txt)            
# '静夜思\n'
print(f.readline(5))  # 读5个字符,'床前明月光'
print(f.readline())   # 读一行,'举头望明月,低头思故乡。\n'
print(f.readline(10))  # 读到行末,',疑是地上霜。\n'

file.readlines(hint=-1)
读取文件中所有数据,指针移动到文件结尾处
可以指定hint 来读取的直到指定字符所在的行

with open('静夜思.txt', 'r', encoding='utf-8') as f:
txt = f.readlines()   # 读取所有行
print(txt)  # ['静夜思\n', '床前明月光,…低头思故乡。\n']
f.seek(0)             
# 移动指针到文件起始位置
txt = f.readlines(6)  # 从当前位置读取到第6 个字符所在行结束
print(txt)   # ['静夜思\n', '床前明月光,疑是地上霜。\n']

文件写入方法

file.write(b)
将给定的字符串或字节流对象写入文件

with open('静夜思.txt', 'a', encoding='utf-8') as f:
f.write(poem_str)  # 将字符串poem_str写入文件,附加到后面
with open('静夜思.txt', 'r', encoding='utf-8') as f:
print(f.read())
poem_str = '独坐敬亭山\n众鸟高飞尽,孤云独去闲。\n相看两不厌,只有敬亭山。\n'

file.write(b)
将给定的字符串或字节流对象写入文件

with open('静夜思.txt', 'w', encoding='utf-8') as f:
f.write(poem_str)  # 将字符串poem_str写入文件,附加到后面
with open('静夜思.txt', 'r', encoding='utf-8') as f:
print(f.read())
poem_str = '独坐敬亭山\n众鸟高飞尽,孤云独去闲。\n相看两不厌,只有敬亭山。\n'

file.writelines(lines)
将一个元素全为字符串的列表写入文件

poem_lst = ['江雪\n', '千山鸟飞绝,万径人踪灭。\n', '孤舟蓑笠翁,独钓寒江
雪。\n']
with open('静夜思.txt', 'r', encoding='utf-8') as f:
print(f.read())
with open('静夜思.txt', 'w', encoding='utf-8') as f:
f.writelines(poem_lst)  # 将列表写入文件

悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

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

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

相关文章

网络编程面试相关内容

1.什么是网络编程网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数…

RPC框架笔记

文章目录RPC概述一次RPC的完整过程RPC的优缺点分层设计编解码层——数据格式协议层——概念网络通信层——网络库RPC框架的关键指标稳定性易用性扩展性观测性高性能Kitex框架解读整体框架自研网络库——Netpoll扩展性设计性能优化——网络库优化性能优化——编解码优化合并部署…

【Flutter入门到进阶】Flutter基础篇---组件生命周期与状态

1 Android界面渲染流程UI树与FlutterUI树的设计思路对比 1.1 android渲染流程中的树的组织 1.1.1 XML加载与解析 1.1.2 ViewRootImpl组织树结构 1.1.3 编舞者掌控调用时机 1.1.4 View负责UI渲染 1.1.5 底层surfacefiling负责沟通硬件 1.2 flutter组件设计思路&#xff0c…

Canal实时监控案例

Canal实时监控案例 文章目录Canal实时监控案例0. 写在前面1. TCP 模式测试1.1 IDEA创建项目canal-module1.2 通用监视类——CanalClient1.2.1 Canal 封装的数据结构1.2.2 在 canal-module 模块下创建 cn.canal 包,并在该包下创建 CanalClient.java文件2. Kafka 模式…

前后端身份验证

1、web 开发模式 【】基于服务端渲染的传统 Web 开发模式 【】基于前后端分离的新型 Web 开发模式:依赖于 Ajax 技术的广泛应用。后端只负责提供 API 接口,前端使用 Ajax 调用接口的开发模式 2、身份认证 【】服务端渲染推荐使用 Session 认证机制 【】…

《堆的应用》TOP-K问题

TOP-K问题:即求数据中前k个最大的元素或者最小的元素,一般情况下,这些数据量是非常大的。 比如:专业前10名、世界500强、世界富豪榜、游戏中前100名等这些排名都是TOP-K问题。 来源于《财富》世界500强排行榜。 对于TOP-k问题,能想到的最简…

【XXL-JOB】XXL-JOB定时处理视频转码

【XXL-JOB】XXL-JOB定时处理视频转码 文章目录【XXL-JOB】XXL-JOB定时处理视频转码1. 准备工作1.1 高级配置1.2 分片广播2. 需求分析2.1 作业分片方案2.2 保证任务不重复执行2.2.1 保证幂等性3. 视频处理业务流程3.1 添加待处理任务3.2 查询待处理任务3.3 更新任务状态3.4 工具…

考研还是工作?两战失败老道有话说

老道入职第一周自我介绍谈谈考研谈谈工作新的启程自我介绍 大家好!在下是一枚考研失败两次的自认为聪明能干的有点小帅的实则超级垃圾的三非名校毕业的自动化渣男。大一下就加入实验室,在实验室焊板子、画板子、培训、打比赛外加摸鱼;参加过…

Swagger扩展 - 同一个接口生成多份Swagger API文档

为同一个ApiOperation生成多份不同Swagger API文档。 0. 目录1. 背景2. 效果展示3. 实现3.1 关键逻辑 - 让接口自解释3.2 关键逻辑 - 如何生成相应的ApiDescription3.3 关键逻辑 - 如何为生成的ApiDescription 赋值3.4 关键逻辑 - 如何动态生成Docket4. 继续优化5. 参考1. 背景…

【Spark分布式内存计算框架——Structured Streaming】3. Structured Streaming —— 入门案例:WordCount

1.3 入门案例:WordCount 入门案例与SparkStreaming的入门案例基本一致:实时从TCP Socket读取数据(采用nc)实时进行词频统计WordCount,并将结果输出到控制台Console。 文档:http://spark.apache.org/docs/2…

一个Bug让人类科技倒退几十年?

大家好,我是良许。 前几天在直播的时候,问了直播间的小伙伴有没人知道「千年虫」这种神奇的「生物」的,居然没有一人能够答得上来的。 所以,今天就跟大家科普一下这个人类历史上最大的 Bug 。 1. 全世界的恐慌 一个Bug会让人类…

Java中的自动类型提升与强制类型转换

一、自动类型提升 自动类型提升是指在程序运行时因为某种情况需要,JVM将较小的数据类型自动转换为较大的数据类型,以保证精度和正确性。在Java中,需要进行类型提升的情况有以下几种: 1. byte、short和char提升为int类型 当运算…

spark sql(五)sparksql支持查询哪些数据源,查询hive与查询mysql的区别

1、数据源介绍 sparksql默认查询的数据源是hive数据库,除此之外,它还支持其它类型的数据源查询,具体的到源码中看一下: 可以看到sparksql支持查询的数据源有CSV、parquet、json、orc、txt、jdbc。这些数据源中前面五个我还能理解&…

【Python】RPA批量生成word文件/重命名及批量删除

批量生成word文件 场景:需要新建多个类似文件名 比如:今天的事例是新建12个文件名为: ​ 保安员考试试卷1及答案.docx ​ 保安员考试试卷2及答案.docx ​ … ​ 保安员考试试卷12及答案.docx 痛点: ​ 手动操作重复性高&a…

目标检测中回归损失函数(L1Loss,L2Loss,Smooth L1Loss,IOU,GIOU,DIOU,CIOU,EIOU,αIOU ,SIOU)

文章目录L-norm Loss 系列L1 LossL2 LossSmooth L1 LossIOU系列IOU (2016)GIOU (2019)DIOU (2020)CIOU (2020)EIOU (2022)αIOU (2021)SIOU (2022…

【SpringCloud】SpringCloud详解之Eureka实战

目录前言SpringCloud Eureka 注册中心一.服务提供者和服务消费者二.需求三.搭建Eureka-Server四.搭建Eureka-Client(在服务提供者配置:用户订单)前言 微服务中多个服务,想要调用,怎么找到对应的服务呢? 这里有组件的讲解 → SpringCloud组件…

深圳大学《计算机论题》作业:大数据与人工智能技术对人类生活的影响

说明 本作业为小组作业,要求基于一场报告完成(即观后感)。共分4个小题,讨论人工智能时代的伦理思考。由于版权原因,不提供报告的具体内容,只展示答题内容。 第一题 (1) 你如何看待…

winform控件PropertyGrid的应用(使运行中的程序能像vistual studio那样设置控件属性)

上周在看别人写的上位机demo代码时,发现创建的项目模板是"Windows 窗体控件库"(如下图) 生成的项目结构像自定义控件库,没有程序入口方法Main,但却很神奇能调试,最后发现原来Vistual Studio启动了一个外挂程序UserContr…

LSM(日志结构合并树)_笔记

WAL:Write Ahead Log 写前日志,顺序日志文件 1 LSM tree的定义 LSM tree: Log-Structured-Merge-Tree,日志结构合并树。 Log-Structured Merge-tree (LSM-tree) is a disk-based data structure designed to provide low-cost …

Linux操作系统学习(了解文件系统动静态库)

文章目录浅谈文件系统了解EXT系列文件系统目录与inode的关系软硬链接动静态库浅谈文件系统 当我们创建一个文件时由两部分组成:文件内容文件属性,即使是空文件也有文件属性 一个文件没有被打开是存储在磁盘中的,而磁盘是计算机中的一个机械…