图解 Python 编程(12) | 文件和编码方式

news2024/11/25 22:34:10

🌞欢迎来到Python 的世界 
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

📆首发时间:🌹2024年6月9日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

文件定位

 文件标识

 文件路径

文件操作

打开文件

追加模式

关闭文件

写文件

读文件

         二进制模式操作文件

编码方式

字符编码

ASCII编码

GB2312 & GBK

乱码问题

Unicode和UTF-8

 不同字符编码间的转换

编码与解码

文件定位

 文件标识
     一个文件需要有唯一确定的文件标识,以便用户找到确定的文件。文件的标识包括3个部分:文件路径、文件名、文件扩展名。
 文件路径

     文件路径可以分为两种,绝对路径相对路径,绝对路径是从根目录出发的路径。相对路径是从参考位置出发,其它文件处于什么路径。用.表示当前文件所在的目录,用..表示更上以及的父目录。同一目录下的文件,想用相对路径找到彼此的话,可以直接使用文件名。


文件操作

打开文件
f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='w',encoding='utf-8') 

 追加模式
f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='a')
f.write("zz    202018085\n")
f.close() #保存并关闭
关闭文件
f.close() #保存并关闭
写文件

file.write(s)
f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='w')  #在文件夹中复制地址时,文件夹中的地址是用 \ 来分隔不同文件夹的,而Python识别地址时只能识别用 / 分隔的地址。
f.write("我叫卿云\n") #写文件
f.write("我喜欢打乒乓球\n") #写文件
f.close() #保存并关闭

file.writelines(s)
file=open('example.txt','w',encoding='utf-8')
# 写入多行内容
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
file.writelines(lines)

读文件

f=open(file='C:/Users/Administrator/Desktop/zz.txt',mode='r')
print(f.readline())#读一行
print('-----分隔符-----')
data=f.read()
print(data)
f.close() #保存并关闭


结果
卿云  202018081

-----分隔符-----
文竹  202018082
循环文件
f = open(file='C:/Users/qingyun/Desktop/兼职⽩领学⽣空姐模特护⼠联系⽅式.txt',encoding="utf-8",mode='r')
for line in f:
     line = line.split()
     name,addr,height,weight,phone = line
     height = int(height)
     weight = int(weight)
     if height > 170 and weight <= 50: # 只打印身⾼>170 and 体᯿<=50的
         print(line)
f.close()

结果
['⻢纤⽻', '深圳', '173', '50', '13744234523']
['罗梦⽵', '北京', '175', '49', '18623423421']
['叶梓萱', '上海', '171', '49', '18042432324']

 二进制模式操作文件

      上面操作的只是文本文件 ,但是如果遇到视频呀、图片呀,你直接打开的话会报错是因为,open()有个encoding参数,默认是None, 是用来告诉解释器,要操作的这个文件 是什么编码。 不填的话,就⽤解释器默认编码,即utf-8。如果你是⼀个gbk编码的文件 ,就必须指定 encoding=gbk

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None,
closefd=True, opener=None)
f = open("gbk_file",encoding="gbk")
for line in f:
 print(line)

     但是像图片、视频,是有自己特殊的编码的,而非什么unicode\utf-8这样的文本编码 。 所以要操作这样的文件 ,你用utf-8什么的去解,自然会报错。

如何处理图片、视频文件呢?

可以用2进制模式打开文件

rb 2进制只读模式

wb 2进制创建模式,若⽂件已存在,则覆盖旧文件

ab 2进制追加模式,新数据会写到文件末尾

这样,你读出来的数据,就是bytes字节类型了,当然写进去的也必须是bytes格式了

f = open("gbk_file2","wb")
f.write("哈".encode("gbk") ) # 写⼊的⽂本要⽤字节类型
练习题-全局文本检索替换

       写⼀个脚本,允许⽤户按以下⽅式执⾏时,即可以对指定⽂件内容进⾏全局替换,且替换完毕后打印替换了多少处内容 。写完后的脚本调用方式:

python your_script.py old_str new_str filename
import sys
old_str=sys.argv[1]
new_str=sys.argv[2]
filename=sys.argv[3]
#1. load into ram
f=open(filename,"r+")
data=f.read()
#2. count and replace
old_str_count=data.count(old_str)
new_data=data.replace(old_str,new_str)
#3. clear old filename
f.seek(0)
f.truncate()
#4.save new data into file
f.write(new_data)
print("成功")
print(f'''成功替换字符'{old_str}' to '{new_str}',共{old_str_count}处...''')

编码方式

       计算机只能存储0,1这些二进制数字,其它的文本,数字等等都必须转换成二进制进行存储。

 字符编码

      我们自己强行约定了⼀个表,把文字和数字对应上,这张表就相当于翻译,我们可以拿着⼀个数字来对比对应表找到相应的文字,反之亦然。

ASCII编码

     用固定的8比特长度来存储每个字符

GB2312 & GBK

         英文问题是解决了, 我们中文如何显示呢? 美国佬设计ASSCII码一共就适用于128个字符,其它语言可能就不够用了,于是不同国家和地区开始制定自己的编码标准,于是我们1980年设计出了GB2312编码表,长成下面的样子。⼀共存了6763个汉字。

直到现在,我们的windows电脑中文版本的编码就是GBK(对GB2312 进行扩展)。

乱码问题

       由于标准不统一,乱码问题也随之产生,这是因为同一个二进制的数字在不同的编码集中代表着不同的字符。因此,Unicode应运而生。Unicode把所有语言都统一到⼀套编码里,这样就不会再有乱码问题了。

 Unicode和UTF-8

        Unicode 2-4字节 已经收录136690个字符,并还在⼀直不断扩张中…Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode

UTF-8: 使用1、2、3、4个字节表示所有字符;优先使⽤1个字节、无法满足则使增加⼀个字节,

最多4个字节。

UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。

UTF-32: 使用4个字节表示所有字符;

总结:UTF 是为unicode编码 设计 的⼀种 在存储和传输时节省空间的编码方案。

如果你要传输的文本包含大量英⽂字符,⽤UTF-8编码就能节省空间:


 不同字符编码间的转换

           windows系统的默认编码是GBK, 如果你把⼀段在windows系统上用gbk编码的字符发送到mac电脑 上, mac默认编码是utf-8, 那这段文字是乱码显示的。 如何实现在mac上正常显示这段 gbk文本呢?

编码与解码

1.把任意编码转换成unicode的过程叫做解码

>>> s="卿云"
>>> s="卿云"#unicode格式
>>> s.encode("utf-8") #将其编码成utf-8
b'\xe5\x8d\xbf\xe4\xba\x91'

2.把unicode转换成的任意编码过程叫做编码

>>> s
'卿云'
>>> s.encode("utf-8").decode("utf-8")#把utf-8编码的字符在转化成unicode
'卿云'
>>> s
'卿云'
>>> s.encode("utf-8") #将其编码成utf-8
b'\xe5\x8d\xbf\xe4\xba\x91

#会变成bytes字节格式,bytes字节类型是用16进制表示的,像\xe5这样两个16进制数是代表一个字节(因为一个16进制数占4位)

字节类型到底是什么

        字节类型其实就是二进制数,只不过为了易于理解,常用16进制数表示。

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

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

相关文章

《编译原理》期末考试复习手写笔记(二)+真题(第四、五、六章)+课后习题答案

第四章考试题型【自顶向下语法分析】 考点梳理&#xff1a; 1.语法分析程序的设计 2.确定的自顶向下分析思想2.1 FIRST集合 2.2 FOLLOW集合 2. 3 SELECT集合 2. 4 LL(1)文法 3.LL(1)文法的判别 如何消除左公因子? 如何消除左递归? 4.非LL(1)到LL(1)文法的等价变换 5.LL(1)分…

Web后端开发(请求-简单参数)(一)

原始方式&#xff1a; 在原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获取。 RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request){//获取请求参数String name request.getParame…

物资材料管理系统建设方案(Word)—实际项目方案

二、 项目概述 2.1 项目背景 2.2 现状分析 2.2.1 业务现状 2.2.2 系统现状 三、 总体需求 3.1 系统范围 3.2 系统功能 3.3 用户分析 3.4 假设与依赖关系 四、 功能需求 4.4.11.7 非功能性需求 五、 非功能性需求 5.1 用户界面需求 5.2 软硬件环境需求 5.3 产品质量需求 5.4 接口…

springAOP 使用aop代替SqlsessionUtil业务层操作

在Maven框架pom配置文件中导入spring相关依赖&#xff1a; <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency…

爬虫可以不必自己写,使用ChatGPT编写抓取电影评论数据脚本

经常去新华书店看看有没有什么新书上架&#xff0c;还是更新挺及时的&#xff0c;可以反映新的技术趋势。这不&#xff0c;最近就看到了这本《巧用 ChatGPT 快速搞定数据分析》&#xff0c;作者是个大牛&#xff0c;第一次看到prompt可以这么写&#xff0c;得写这么长&#xff…

LeMeViT:具有可学习元令牌的高效ViT

本文提出使用可学习的元令牌来制定稀疏令牌&#xff0c;这有效地学习了关键信息&#xff0c;同时提高了推理速度。从技术上讲&#xff0c;主题标记首先通过交叉关注从图像标记中初始化。提出了双交叉注意&#xff08;DCA&#xff09;来促进图像令牌和元令牌之间的信息交换&…

【JS】理解闭包及其应用

历史小剧场 明朝灭亡&#xff0c;并非是简单的政治问题&#xff0c;事实上&#xff0c;这是世界经济史上的一个重要案例。 所谓没钱&#xff0c;就是没有白银。----《明朝那些事儿》 什么是闭包&#xff1f; 闭包就是指有权访问另一个函数作用域中变量的函数 闭包变量存储位置&…

数据结构【堆排序】

前言 在上一篇文章主要讲解了二叉树的基本概念和堆的概念以及接口的实现&#xff08;点此处跳转&#xff09; 我们简回顾下堆的基本概念&#xff1a; 1.堆分为大堆和小堆 大堆&#xff1a;父亲结点比左右孩子都大&#xff0c;根结点是最大的小堆&#xff1a;父亲结点比左右孩…

关于CodeCombat(沙漠)布朗噪声的攻略

关于CodeCombat(沙漠)//布朗噪声的攻略 总的来说怎么猥琐怎么来 1.走到墙角骷髅看不到的位置&#xff0c;让宠物制造噪音&#xff0c;然后英雄走过去&#xff0c;就是这样没错&#xff08;坐标之类能明白) 最后看看运行结果吧 Rec 0002 希望天天开心

CAN协议简介

协议简介 can协议是一种用于控制网络的通信协议。它是一种基于广播的多主机总线网络协议&#xff0c;常用于工业自动化和控制领域。can协议具有高可靠性、实时性强和抗干扰能力强的特点&#xff0c;被广泛应用于汽车、机械、航空等领域。 can协议采用了先进的冲突检测和错误检测…

C++系统编程篇——linux软件包管理器yum

Linux 软件包管理器yum (1)linux系统&#xff08;centos生态&#xff09; 安装方式有三种&#xff1a;源代码安装、rpm安装、yum安装&#xff08;最简单&#xff09; ls /etc/yum.repos.d/ 查看该路径下的文件 包含了用于配置 YUM 软件包管理器的仓库配置文件。这些配置文件…

QT-轻量级的笔记软件MyNote

MyNote v2.0 一个轻量级的笔记软件&#x1f4d4; Github项目地址: https://github.com/chandlerye/MyNote/tree/main 应用简介 MyNote v2.0 是一款个人笔记管理软件&#xff0c;没有复杂的功能&#xff0c;旨在提供便捷的笔记记录、管理以及云同步功能。基于Qt 6.6.3 个人开…

ASUS华硕ROG幻14Air笔记本GA403UI(UI UV UU UJ)工厂模式原厂Windows11系统安装包,带MyASUS in WinRE重置还原

适用型号&#xff1a;GA403UI、GA403UV、GA403UU、GA403UJ 链接&#xff1a;https://pan.baidu.com/s/1tz8PZbYKakfvUoXafQPLIg?pwd1mtc 提取码&#xff1a;1mtc 华硕原装WIN11系统工厂包带有ASUS RECOVERY恢复功能、自带面部识别,声卡,显卡,网卡,蓝牙等所有驱动、出厂主题…

大模型的演进之路:从萌芽到ChatGPT的辉煌

文章目录 ChatGPT&#xff1a;大模型进化史与未来展望引言&#xff1a;大模型的黎明统计模型的奠基深度学习的破晓 GPT系列&#xff1a;预训练革命GPT的诞生&#xff1a;预训练微调的范式转换GPT-2&#xff1a;规模与能力的双重飞跃GPT-3&#xff1a;千亿美元参数的奇迹 ChatGP…

(三)React事件

1. React基础事件绑定 语法&#xff1a; on 事件名称 { 事件处理程序 }&#xff0c;整体上遵循驼峰命名法 App.js //项目根组件 //App -> index.js -> public/index.html(root)function App() {const handleClick () > {console.log(button被点击了)}return (<…

Data Mining2 复习笔记6 - Optimization Hyperparameter Tuning

6. Optimization & Hyperparameter Tuning Why Hyperparameter Tuning? Many learning algorithms for classification, regression, … Many of those have hyperparameters: k and distance function for k nearest neighbors, splitting and pruning options in decis…

【JS】立即执行函数IIFE 和闭包到底是什么关系?

历史小剧场 ”我希望认您作父亲&#xff0c;但又怕您觉得我年纪大&#xff0c;不愿意&#xff0c;索性让我的儿子给您作孙子吧&#xff01;“ ----《明朝那些事儿》 什么是立即执行函数&#xff1f; 特点&#xff1a; 声明一个匿名函数马上调用这个匿名函数销毁这个匿名函数 …

湖南(品牌控价)源点调研 手机价格管理对品牌的影响分析

前言&#xff1a;手机自发明以来&#xff0c;过去一直是国际品牌占主导地位&#xff0c;从最初的爱立信、摩托罗拉&#xff0c;到后来的诺基亚、三星&#xff0c;苹果在这个手机行业里&#xff0c;竞争激励&#xff0c;没有百年企业&#xff0c;每个品牌的盛衰都有背后的历史背…

transformer中对于QKV的个人理解

目录 1、向量点乘 2、相似度计算举例 3、QKV分析 4、整体流程 (1) 首先从词向量到Q、K、V (2) 计算Q*&#xff08;K的转置&#xff09;&#xff0c;并归一化之后进行softmax (3) 使用刚得到的权重矩阵&#xff0c;与V相乘&#xff0c;计算加权求和。 5、多头注意力 上面…

VMware Fusion 如何增加linux硬盘空间并成功挂载

文章目录 0. 前言1. 增加硬盘空间2. 硬盘分区2.1 查看硬盘2.2 分区2.3 格式化2.4 挂载 3. 参考 0. 前言 如果发现虚拟机分配的硬盘不足&#xff0c;需要增加硬盘空间。本文教给大家如何增加硬盘空间并成功挂载。 查看当前硬盘使用情况&#xff1a; df -h可以看到&#xff0c…