Python 高级编程(文件操作)

文件:存储在某种长期存储设备上的数据!!包括(硬板 u 盘 移动硬盘 光盘)
计算机中临时的数据: 存储在内存中,一旦操作结束,内存中的空间就会被释放

文件(特指普通文本)的基本操作包括:

1.打开文件
2.读写文件
   读文件: 将文件中的内容存储在内存中
   写文件: 将内存的数据写入文件中  文件存储的位置是磁盘 磁盘是长期存储数据 内存是短期存储 当你的程序运行完成后内存中的内容就会被释放
3.关闭文件
在python中操作文件通常使用4个函数(函数)
  1.open 打开文件 返回文件操作的对象
  2.read 读取文件,将文件中的内容读取到内存中
  3.write 写文件 将指定的内容写入到磁盘中
  4.close 关闭文件
文件指针 -- 光标
标记了从哪个位置开始读取数据
首次打开文件的时候,并没有指定它的模式,文件指针指向文本的开始位置

下面这些操作只是针对文本文件就是  .txt 格式

1. 打开文件:

str = open(r'D:\500px\test\test1.txt','r')

 2.读取文件

str2 = str.read()
print(str2)

3.关闭文件

 str.close

完整项目 

#根据文件读写案例,进行文件复制
f = open('makdir.txt','r') #打开文件而且是只读模式
f2 = open('new_file_copy','w') #打开文件而且只是写入模式
content = f.read()  #读取makdir.txt 文件中的内容
f2.write(content) #将从makdir.txt文件中读取到的内容写入new_file_copy  文件中
f.close() #关闭makdir.txt
f2.close() #关闭new_file_copy

上面是一些小的文本内容,如果是一些比较大的文件,我们在读取的时候用到 readlines,逐行读,逐行写,而不是简单的一次性读完写入

# 大文件操作 对于大文件我进行的是逐行的读写操作
f3 = open('makdir.txt','r')
f4 = open('big_file.txt','w')
while  True:  #  这是一个死循环只能使用break 方可跳出循环
    content = f3.readline() # 逐行读取文件
    if not content:   # 如果 content 为空
        break         #跳出 while 循环
    f4.write(content) # 否则将content写入新的f3中
f3.close()
f4.close()

读写bytes类型数据(在计算机的底层都是以二进制的形式存储文件内容) 

因为视频图片的存储形式都是bytes 流

#rb wb ab 是对字节的操作
rb : 以二进制 (字节) 的格式打开一个文件用于只读,文件指针放在开头,如果文件不存在则会抛出异常
wb : 打开一个文件用于写入二进制(字节) ,如果该文件已经存在,会先清空或者覆盖 然后将文件放在文件开头,如果不存在,就会创建该文件
ab :对一个文件用于二进制的形式进行追加,如果该文件存在,文件指针则会指向原来文本内容的末尾

以下只针对二进制数据 

1.读模式

f1 = open(r'C:\Users\HP\Desktop\爬虫.png','rb')

2.写模式

f1 = open(r'C:\Users\HP\Desktop\爬虫1.png','wb')

 3.追加模式

f1 = open(r'C:\Users\HP\Desktop\爬虫1.png','ab')

需要注意的是,在写入模式下,如果文件存在则会清空文件中的内容,如果不存在则会创建一个文件。

f1 = open(r'C:\Users\HP\Desktop\爬虫1.png','wb')  #打开文件 写模式
f2 = open(r"C:\Users\HP\Desktop\python\test.jpg",'rb') #打开文件 读模式
content = f2.read() #读取test.jpg 中的字节流
f1.write(content) #将从test.jpg 中读取到的字节流写入到爬虫1.png中
f1.close()
f2.close()
print('写入完成') # 提示操作完成

 

爬虫1.png 本来是存在的 ,我对他做了写操作

 

 经过 将test.jpg  字节流写入到 爬虫1.png 后 照片发生了变化,这恰好证实了,如果存在这么一个照片则会删除它,从开头写入图片的字节流

我这里说的字节流是指图片在磁盘中中的保存形式 ,每一张图片是由若干个以b开头的字节来表示我对图片文件做读写操作,其实就是对这一些byte数据做读写 比如: 

 

 

文本和字节之间的转化

encode 编码 将字符串转换成 字节

decode 解码 将字节转换成 字符串

f = open('./python进阶/mydata.text','r')
content = f.read().encode() #我对读到的str做了编码转换成了字节
#对它进行读取,才能进行转码操作
print(content)
print(type(content))
f_f = content.decode() #我将转换的字节有通过解码还原回了str
    # .encode('utf-8')
print(f_f)
print(type(f_f))

 谨记:

r   rb

w  wb

a   ab

统一来说,r和rb都是读取模式,如果文件不存在则会抛出错误,

w 和 wb 都是写入模式,如果文件存在,则会清空,文件内原有的内容,如果不存在,则会创建一个新的文件

a 和 ab都是追加模式,如果文件存在,文件的指针则会指向原始文件中内容的末尾,你新追加的内容的开头则会接续原文件内容的末尾,如果文件不存在,则会创建一个新的文件、

加 b 和 不加 b 的原因是 加了b(rb,wb....),是用来存储文件形式是bytes(比如图片 视频 音频),不加b(r,b..)是用于处理文本内容的 

 关于字节 和二进制的关系,我想赘叙几点:

一个字节(bytes ) = 8 个二进制 (bit) 字节就是 kb 中的 b
8个0 或者1 作为一个字节
在ANSI 编码方式下 一个英文(包括英文特殊符号)占用一个字节 、 中文(包含中文特殊字符号) 占用2 个字节
在 unicode 编码方式下 一个英文和中文 或者英文特殊符号和中文特殊符号 占用2个字节
在utf-8 编码格式下 一个英文符号占用一个字节, 中文占用3个字节

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言 4.2.2安装包下载及安装教程

[软件名称]:R语言 4.2.2 [软件大小]: 75.6 MB [安装环境]: Win11/Win10/Win7 [软件安装包下载]: https://pan.quark.cn/s/b6f604930d04 R语言软件的GUI界面比较的简陋,只有一个命令行窗口,且每次创建图片都会跳出一个新的窗口,比较的繁琐,我们可以安装RStudio,来更方便的操作R(…

ChatGPT +工业机器人/自动驾驶控制器的一些尝试

ChatGPT 的功能目前已扩展到机器人领域,可以用语言直观控制如机械臂、无人机、家庭辅助机器人等的多个平台。这会改变人机交互的未来形式吗? 你可曾想过用自己的话告诉机器人该做什么,就像对人说话那样? 比如说,只要告…

多个硬盘挂载到同一个目录

同一目录无法重复挂载,后挂载的会覆盖之前挂载的磁盘。但是现在需要将4块磁盘并行挂载,该如何操作呢? 将2块磁盘合并到一个逻辑卷 进行挂载。 基本知识 基本概念PV(Physical Volume)- 物理卷物理卷在逻辑卷管理中处于最底层,它可…

新能源锂电池行业除杂工艺介绍

近年来新能源汽车快速发展对锂电池的需求引发了人们对锂资源的高度关注。由于锂需求不断上升,全球锂资源越来越紧缺,而在生产含锂产品中会有大量废水、废渣。这些废水废渣含有丰富的锂,对其进行回收提锂具有极高的经济利益。在氟化锂生产中会…

文件操作介绍及C语言实现通讯录管理系统3.0最终版(文件操作版本)

文章目录1. 前言2. 文件操作2.1 什么是文件2.2 文件缓冲区2.3 文件指针2.4 文件的打开与关闭2.5 文件的顺序读写3. 优化通讯录3.1 保存通讯录3.2 加载通讯录4. 结尾1. 前言 上一篇文章我们学习了动态内存开辟的相关知识点,并用动态内存函数优化了我们的通讯录&…

【数据库连接,线程,ThreadLocal三者之间的关系】

一、数据库连接与线程的关系 在实际项目中,数据库连接是很宝贵的资源,以MySQL为例,一台MySQL服务器最大连接数默认是100, 最大可以达到16384。但现实中最多是到200,再多MySQL服务器就承受不住了。因为mysql连接用的是tcp协议&…

JAVA:常用API

一.什么是API? API(Application Programming Interface):应用程序编程接口。 简单的来说:就是Java帮我们已经写好的方法,我们可以直接使用。 二.有哪些常用的API? Object、Objects、StringB…

二战华为成功上岸,准备了小半年,要个27k应该也算不上很高吧~

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,华为的游戏专场又是最早开始的,就投递了&#xf…

二,八,十,十六进制等常用进制详解

总目录 文章目录总目录一、常用进制1、进制基本信息2、各进制的表示形式二、进制转换原理1、其他进制转为十进制计算原理2、十进制转为其他进制计算原理3、二进制,八进制,十六进制之间的转换结语一、常用进制 1、进制基本信息 基数数码名称描述20 和 1…

【C++】| C/C++内存管理

前言: 在上期,我们已经对类和对象的全部知识进行了总结和梳理。在类和对象学习完之后,今天我将给大家呈现的是关于——C/C内存管理的基本知识。 本文目录 1. C/C内存分布 2. C语言中动态内存管理方式 (1)C语言跟内…

php科研项目申报审批系统

目 录 1 绪论 4 1.1 开发背景 4 1.2 开发意义 4 1.3 相关知识介绍 4 1.3.1 Apache 4 1.3.2 MySQL 5 1.3.3 PHP 6 1.3.4 Dreamweaver CS3 7 1.4 本文所做的工作及组织结构 7 2 系统分析 7 2.1 需求分析 7 2.2 可行性分析 7 2.3 系统界面…

CSDN博客专家证书发放名单(2023年3月已更新)

目录 证书发放频次 6月(第一批)证书发放名单(80位) 7月(第二批)证书发放名单(50位) 8月(第三批)证书发放名单(54位) 9月&#xf…

2个月月活突破1亿,增速碾压抖音,出道即封神的ChatGPT,现在怎么样了?ChatGPT它会干掉测试?

从互联网的普及到智能手机,都让广袤的世界触手而及,如今身在浪潮中的我们,已深知其力。 前阵子爆火的ChatGPT,不少人保持观望态度。现如今,国内关于ChatGPT的各大社群讨论,似乎沉寂了不少,现在…

Prometheus监控实战之Exporter详解

1 exporter是什么? 广义上向prometheus提供监控数据的程序都可以成为一个exporter的,一个exporter的实例称为target, exporter来源主要2个方面,一个是社区提供的,一种是用户自定义的。 2 常用exporter 官方和一些社区提供好多ex…

彻底关闭Windows自动更新

彻底关闭Windows自动更新 目录 彻底关闭Windows自动更新 前言 Windows10彻底关闭自动更新方法步骤: 一、禁用Windows Update服务 二、在组策略里关闭Win10自动更新相关服务 三、禁用任务计划里边的Win10自动更新 四、在注册表中关闭Win10自动更新 前言 我们用…

易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办?

易语言支持库配置闪退打不开怎么办? 易语言支持库配置闪退解决方法丨支持库配置崩溃_易语言打开支持易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办? 很多人都遇到过 打开易语言支持库安装菜单报错退出的问题 今天教大家解决方法 我们…

4.2--Redis总结之高可用篇(关于哨兵机制)---(温故而知新篇)--加油呀

1.为什么要有哨兵机制? 在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点进行数据同步了 哨兵机制,它的作用是实现主从节…

spring集成mybaits以注解方式完成连表查询练习

题目: 以注解的方式完成连表查询 1、查询全部员工信息,要求显示部门名称 2、根据姓名模糊查询员工信息 自己看完,建一个简单的员工表和部门表。 1、先创建一个maven模块,这里直接建的普通…

SpringMVC --- 获取请求参数、域对象共享数据、视图

一、SpringMVC获取请求参数 1.1、通过ServletAPI获取 将 HttpServletRequest 作为控制器方法的形参,此时 HttpServletRequest 类型的参数表示封装了当前请求的请求报文的对象 RequestMapping("/param/servletAPI")public String getParamByServletAPI(H…

从零开始实现一个C++高性能服务器框架----配置模块

此项目是根据sylar框架实现,是从零开始重写sylar,也是对sylar丰富与完善 项目地址:https://gitee.com/lzhiqiang1999/server-framework 简介 项目介绍:实现了一个基于协程的服务器框架,支持多线程、多协程协同调度&am…