Python基础—文件操作

2023-10-26

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)  # 将列表写入文件

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python基础—文件操作 的相关文章

随机推荐

  • 从目标检测数据集中扣出所需类别进行分类

    文章目录 1 获取VOC数据集中两轮车 2 接着做COCO数据集的分类数据获取 3 YOLO 格式数据 4 openimage数据获取 获取标签 根据displayname 获取 labelname 并指定我们想要的类别 根据标签名找到对应
  • Java多线程编程

    1 Java多线程推荐两本比较好的书 Java多线程编程实战指南 核心篇 pdf 2017年出版 内容新 讲解清晰 首推这本 然后是 Java多线程编程核心技术 2015年出版 由浅入深 编程例子多 也不错 本博客只做易忘拾遗 2 this
  • 【100%通过率 】【华为OD机试 c++/java/python】任务总执行时长【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 任务总执行时长 任务编排服务负责对任务进行组合调度 参与编排的任务有两种类型 其中一种执行时长为taskA 另一种执行时长为taskB 任务一旦
  • 麒麟 mips mysql_中标麒麟(龙芯CPU)--docker基础镜像制作

    Docker 是一个开源的应用容器引擎 基于 Go 语言 并遵从Apache2 0协议开源 Docker 的出现为开发人员和运维人员带来了极大的便利 Docker在X86下常见的发行版Linux如Ubuntu Centos上应用非常成熟 教
  • 数据结构---插入排序

    插入排序 算法思想 具体流程 JAVA实现 算法时间复杂度为O n2 的排序 冒泡排序 弊端 元素交换次数太多了 选择排序 弊端 当数列包含多个值相等的元素时 选择排序有可能打乱它们原有的顺序 插入排序 算法思想 维护一个有序区 把元素一个
  • spring-session整合redis原理 排查失效原因

    根据网上配置了一个springsession整合redis作为session后 发现session获取失败 redis里面是有值 登录模块设置进去也能获取的到 但是其他的服务就获取不到 记录一下 跟着源码探寻为何失败 auth服务的配置 引
  • Linux下SVN 命令每次都要输入密码

    问题描述 SVN每次操作都需要输入密码 操作相当麻烦 影响效率 解决方法 修改vi subversion config 文件 将password stores的值修改为simple 即 password stores simple auth
  • k8s中文件描述符与线程限制

    背景 linux中为了防止进程恶意使用资源 系统使用ulimit来限制进程的资源使用情况 包括文件描述符 线程数 内存大小等 同样地在容器化场景中 需要限制其系统资源的使用量 限制方法 ulimit docker 默认支持ulimit设置
  • 跑深度学习nvidia驱动忽然失效的详细解决方法

    由于经常跑深度学习 所以对于显卡驱动什么的都还是整的比较明白的不含糊 所以都能跑的起来 但是今天跑pytorch框架时 用到cuda 忽然给我报了个错 RuntimeError No CUDA GPUs are available 这给我整
  • 两个非递减顺序表合并成一个非递减顺序表

    两个非递减顺序表合并成一个非递减顺序表 引入 以下这个例题的描述是关于合并两个有序的数组 然后合并之后同样也是一个非递减的顺序排列 但是我名这里讲的不是顺序表 而是封装成一个顺序表 但是我们这里的顺序表其实底层同样是一个数组 所以解题的思路
  • 脚踏实地《数据结构第二章》第一节:线性表的定义和基本操作

    考点分析 一 线性表的定义 数据结构三要素 逻辑结构 定义 线性表是具有相同数据类型的n n gt 0 个数据元素的有限序列 其中n为表长 当n 0时线性表是一个空表 相同 每个数据元素所占空间一样大 帮助计算机快速找到某一个具体的元素 序
  • Deepin(Linux)下安装tensorflow-gpu(2019-5-28)

    2019 9 7更新 六 6中安装tensorflow gpu不要采用pip install tensorflow gpu 1 9 直接用conda install channel https conda anaconda org anac
  • Spring MVC案例

    文章目录 Spring MVC 基于XML配置与注解的方式使用Spring MVC 一 创建项目SpringMVCDemo01 二 在pom xml中添加依赖 三 添加项目web功能 四 创建登录页面 登录成功页面 登录失败页面 五 创建登
  • 网安之web攻防第三十天

    知识点 1 数据库堆叠注入 根据数据库类型决定是否支持多条语句执行 2 数据库二次注入 应用功能逻辑涉及上导致的先写入后组合的注入 3 数据库Dnslog注入 解决不回显 反向连接 SQL注入 命令执行 SSRF等 4 黑盒模式分析以上 二
  • airpodspro窃听模式_AirPods Pro实时收听怎么关闭? AirPods Pro实时收听的使用方法

    苹果全新AirPods Pro增加了许多新功能 首先 是控制播放 苹果在AirPods Pro中放弃了敲击手势 并用杆上的力传感器取代了它 控制音乐或视频只需要简单的短按即可 一次按压即可播放或暂停当前播放 两次按压将跳至下一曲目 而三次挤
  • 2019-07-11T09:15:41.000+0000类似时间转换

    let a 2019 07 11T09 15 41 000 0000 new Date a
  • (个人)AR电子书系统创新实训第一周(2)

    了解ZXing Net 想要在unity上实现下载资源的功能 我首先需要确认二维码扫描系统在unity上的可行性 如果要自行开发一套二维码扫描系统 不仅需要知道二维码生成和解码的原理 而且应该还需要用到一些图形学相关的代码库 如opencv
  • Android中为layout创建子文件夹

    在开发Android项目的时候 往往都有一大批java文件和layout文件 java文件分类比较简单 直接方法创建文件夹就行 但layout还需要多一步配置 看最后的文件结构图 实现步骤 1 创建相应的文件夹结构 需要注意的是 无论如何
  • ‘float‘ object has no attribute ‘decode‘

    错误代码 weibo df pd read csv Users dl Desktop 情感分析论文 词云图 微博文本数据 原始数据 原数据 表格 微博文本内容 csv print weibo df head 在读取csv或者excel文件时
  • Python基础—文件操作

    Python基础 文件操作 文件操作 文件是指为了重复使用或长期使用的目的 以文本或二进制形式存放于外部存储器 硬盘 U盘 光盘等 中的数据保存形式 文件是信息交换的重要途径 也是利用程序解决实际问题的重要媒介 程序对数据读取和处理都是在内