当前位置: 首页 > news >正文

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

🌞欢迎来到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 = lineheight = 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进制数表示。

相关文章:

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

&#x1f31e;欢迎来到Python 的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年6月9日&am…...

CSDN个人主页动态地图(前端/后端)

前段时间有人问我&#xff0c;关于CSDN个人主页动态地图的实现&#xff0c;我来解答一下。 这里要注意一下&#xff1a;使用CSDN的API需要遵循其开发者协议和使用规范&#xff0c;确保你的使用方式符合相关规定 前端部分&#xff1a; 创建一个HTML页面作为个人主页。在页面上放…...

GUI编程-01

组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 Java提供了丰富的图形用户界面&#xff08;Graphics User Interface&#xff0c;GUI&#xff09;的类库&#xff0c;基于这些类库可以编写窗口程序。 Java关于图形界面的类库主要放在…...

Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

文章目录 前言一、自定义协议传结构体对象 序列化和反序列化什么是序列化&#xff1f;反序列化 二、计算器服务端&#xff08;线程池版本&#xff09;1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客户端Windows客…...

Hive知识体系保姆级教程

一. Hive概览 1.1 hive的简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进行运算&#xff0c;底层由HDFS来提供数据的存储&#xff0c;说白了h…...

三大网络简介

一、三大网是哪三大网 三大网络为电话网、电视广播网、互联网&#xff0c;如果这三大网络使用都是“ip分组交换”技术的话&#xff0c;他们将会被融合成为一个网络&#xff0c; 但是由于历史原因&#xff0c;他们使用了不同的通信技术&#xff0c;三大网各自拥有相当的独立性&a…...

Element-UI全面入门与实战技巧

本文详细介绍了Element-UI的安装、配置、组件使用、布局技巧、交互设计、表单处理、主题定制等内容&#xff0c;旨在帮助开发者快速掌握Element-UI&#xff0c;并能在实际项目中灵活应用。 文章目录 一、Element-UI概述与安装1.1 Element-UI简介1.2 环境搭建1.3 安装Element-UI…...

第103天: 权限提升-Linux 系统辅助项目脏牛Dirty内核漏洞SUIDGUID

项目下载地址 综合类探针&#xff1a; https://github.com/liamg/traitor 自动化提权&#xff1a; https://github.com/AlessandroZ/BeRoot 信息收集&#xff1a; https://github.com/rebootuser/LinEnum https://github.com/sleventyeleven/linuxprivchecker 漏洞探针&#xf…...

如何用群晖当异地组网服务器?

在当今信息化时代&#xff0c;远程通信成为了企业和个人之间不可或缺的一部分。特别是对于跨地区的通信需求&#xff0c;一个可靠的异地组网服务器是必不可少的。而群晖&#xff08;Synology&#xff09;作为一款功能强大的网络存储设备&#xff0c;可以被用作办公室或家庭的异…...

文件怎么去重?5个技巧,教你删除重复文件!

一般来说&#xff0c;在处理大量文件时&#xff0c;你可能会遇到重复的类似文件。这些文件占据了电脑上不必要的磁盘空间&#xff0c;导致系统性能下降。而这些文件可以是不同类型的&#xff0c;如照片、视频、音频、存档、文档等。正因如此&#xff0c;您需要通过文件去重来删…...

标准发布实施 | 《村镇污水处理一体化集成装备技术规范》

根据《中华人民共和国标准化法》以及国家标准化管理委员会、民政部联合制定的《团体标准管理规定》&#xff0c;依据全国团体标准信息平台和《中华环保联合会团体标准管理办法&#xff08;试行&#xff09;》&#xff0c;全国团体标准《村镇污水处理一体化集成装备技术指南》&a…...

人工智能--教育领域的运用

文章目录 &#x1f40b;引言 &#x1f40b;个性化学习 &#x1f988;体现&#xff1a; &#x1f988;技术解析&#xff1a; &#x1f40b;智能辅导与虚拟助手 &#x1f988;体现&#xff1a; &#x1f988;技术解析&#xff1a; &#x1f40b;自动评分与评估 &#x1f…...

【设计模式深度剖析】【3】【行为型】【职责链模式】| 以购物中心客户服务流程为例加深理解

&#x1f448;️上一篇:命令模式 | 下一篇:策略模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 职责链模式定义英文原话直译如何理解呢&#xff1f; 职责链模式的角色1. Handler&#xff08;抽象处理者&#xff09;2. ConcreteHandler&#xff08;具体处理者…...

评价GPT-4的方案

评价GPT-4的方案 引言: 随着人工智能技术的不断发展,自然语言处理领域取得了显著的突破。其中,GPT-4作为最新的大型语言模型之一,备受关注。本方案旨在对GPT-4进行全面评价,包括其技术特点、性能表现、应用场景以及潜在的影响等方面。 一、技术特点 1. 模型规模和参数数…...

LeetCode | 1624.两个相同字符之间的最长子字符串

这道题拿到手想法就是去双重遍历暴力解&#xff0c;对于每个字符&#xff0c;从后往前遍历字符串&#xff0c;找到从后往前一直到本次遍历的这个字符串这段子串中和这个字符串相同的字符位置&#xff0c;然后得到子字符串的长度&#xff0c;和ans存储的值做一个比较&#xff0c…...

【CS.AI】GPT-4o:重新定义人工智能的新标杆

文章目录 1 序言2 GPT-4o的技术亮点3 GPT-4o与前代版本的对比3.1 热门AI模型对比表格GPT-3.5GPT-4GPT-4oBERTT5 3.2 其他 4 个人体验与感受5 结论 1 序言 嘿&#xff0c;大家好&#xff01;今天要聊聊一个超级酷的AI新突破——GPT-4o&#xff01;最近&#xff0c;OpenAI发布了…...

野火FPGA跟练(四)——串口RS232、亚稳态

目录 简介接口与引脚通信协议亚稳态RS232接收模块模块框图时序波形RTL 代码易错点Testbench 代码仿真 RS232发送模块模块框图时序波形RTL 代码Testbench 代码仿真 简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&#xff0c;异步串行通信接口。发送数据时…...

Qt for Android 申请摄像头权限

步骤 1. 添加用户权限 方式1: AndroidManifest.xml 中新增&#xff08;不添加后面申请选项时不弹窗&#xff09; 或者再Qt Creator中直接添加 方式2: .pro 中引用multimedia 模块&#xff0c;编译时配置自动添加 <uses-permission android:name"android.permissi…...

kivy 百词斩项目 报错

AttributeError: FigureCanvasKivyAgg object has no attribute resize_event AttributeError: FigureCanvasKivyAgg object has no attribute resize_event 是一种常见的Python错误&#xff0c;当你试图访问一个对象&#xff08;在这个例子中是 FigureCanvasKivyAgg 对象&am…...

ChatTTS 文字生成语言本地模型部署

ChatTTS部署 官方信息 [ChatTTS首页](https://chattts.com/)搭建步骤 1、下载源码 git clone https://github.com/2noise/ChatTTS.git 2、按照环境 pip install torch ChatTTS pip install -r requirements.txt 3、下载模型 git clone https://www.modelscope.cn/pzc163/ch…...

多曝光融合算法(三)cv2.createAlignMTB()多曝光图像融合的像素匹配问题

文章目录 1.cv2.createAlignMTB() 主要是计算2张图像的位移&#xff0c;假设位移移动不大2.多曝光图像的aline算法&#xff1a;median thresold bitmap原理讲解3.图像拼接算法stitch4.多曝光融合工具箱 1.cv2.createAlignMTB() 主要是计算2张图像的位移&#xff0c;假设位移移动…...

C/C++|类型推导中的模式匹配

在C11及以上的相关语法中&#xff0c;特别是在模版元编程的范式里&#xff0c;类型推导是了重中之重。 在 《Effective Modern C 》 中第一章主要就是讲各种类型推导。 当然了&#xff0c;谈到类型推导&#xff0c;我们不得不先搞懂类型推导中的模式匹配&#xff0c;这是基础&a…...

The 18th Northeast Collegiate Programming Contest(5/9/13)

心得 赛中ac&#xff1a;5&#xff0c;目前ac&#xff1a;9&#xff0c;题目总数&#xff1a;13 中档可做题还是很多的&#xff0c;可惜遇到了难绷的queueforces&#xff0c; 最后15min才判出来&#xff0c;oi赛制5wa4遗憾离场&#xff0c;赛后把几个题都给调过了&#xff0…...

Vue前端在线预览文件插件

Vue前端在线预览文件插件 一、使用场景 1.1.像文档资料等&#xff0c;只想让他人在线预览&#xff0c;但不能下载。此等场景需求可以用到此插件。 二、此文档介绍两种插件 1.view.xdocin插件 (上线后免费几天&#xff0c;然后收费&#xff0c;添加作者后&#xff0c;可以延…...

【ai】Audio2Face

Audio2Face 简介 Audio2Face是英伟达Omniverse平台的一部分,它使用先进的AI技术来生成基于音频输入的逼真面部动画。这个技术主要利用深度学习模型来解析人声,进而驱动一个三维模型的面部表情。下面是Audio2Face工作流程的详细说明: 预备阶段 在使用Audio2Face之前,需要准…...

2024.6.9 一

装饰器(Decorators) 装饰器是 Python 的一个重要部分。简单地说&#xff1a;他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短&#xff0c;我们在用到装饰器时,常用到一个的符号,这个叫做语法糖,在函数定义前加上decorator_name&#xff0c; 那么后面的函数执行…...

地图之战争迷雾/地图算法/自动导航(一)

战争迷雾 TiledMap 创建黑色覆盖块&#xff0c;然后使用碰撞组件&#xff0c;控制黑色块的显示和隐藏 地图算法 在有些游戏中&#xff0c;地图需要随机生成&#xff0c;比如游戏中的迷宫等&#xff0c;这就需要地图生成的算法&#xff1b;在角色扮演类游戏中&#xff0c;角色…...

【wiki知识库】06.文档管理页面的添加--前端Vue部分

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f43b;前端Vue模块的改造 BUG修改 1.wangeditor无法展示问题 2.弹窗无法正常关闭问题 2.1 添加admin-doc.vue 2.1.1 点击admin-ebook中的路由跳转到admin-doc 2.2.2 进入…...

新电脑必装的7款软件,缺一不可

如果你买了新电脑或者是重装了新系统&#xff0c;那么这7款软件你一定要安装。 1、SpaceSniffer 如果你的C盘经常爆红&#xff0c;但是不知道是什么原因&#xff0c;那么你应该需要SpaceSniffer这款软件&#xff0c;它可以把你C盘中文件的空间占用情况&#xff0c;以大小方框…...

程序员学习Processing和TouchDesigner视觉编程相关工具

Proessing Processing 是一种用于视觉艺术和创意编程的开发环境和编程语言。它最初是为了帮助非专业程序员学习编程&#xff0c;特别是那些对于创意编程和视觉表达感兴趣的人。Processing 提供了简单易用的 API&#xff0c;使得绘制图形、创建动画和交互式应用变得相对容易。 …...

wordpress播放m3u8/网站建设图片

一&#xff1a;表单元素使用easyui时&#xff0c;textbox和validatebox设置值和获取值的方式不一样【转】 1.为text-box设置值只能使用id选择器选择表单元素&#xff0c;只能使用textbox("setValue", value) 方式设置值&#xff0c;使用textbox("getValue"…...

一般淘宝网站做几个月赚钱/网站结构

我创建了自己的函数&#xff0c;从sklearn创建的决策树中提取规则&#xff1a;import pandas as pdimport numpy as npfrom sklearn.tree import DecisionTreeClassifier# dummy data:df pd.DataFrame({col1:[0,1,2,3],col2:[3,4,5,6],dv:[0,1,0,1]})# create decision treedt…...

什么网站可以做会计题目/百度应用平台

不称深度指南&#xff0c;只愿浅度指北之前&#xff0c;用 VBA 开发了一个 Excel 插件「浅北表格助手」&#xff0c;随后&#xff0c;也发了两篇关于WordVBA 的教程&#xff0c;后台有小伙伴留言&#xff0c;说希望看到一些偏实用的代码。今天&#xff0c;它来了。我们在写 Wor…...

制作网站需要的服务器/长春seo排名优化

以前在学校学习C语言的时候一直搞不懂那个共用体union有什么用的。工作之后才发现它的一些妙用&#xff0c;现举例如下&#xff1a;1. 为了方便看懂代码。比如说想写一个3 * 3的矩阵&#xff0c;可以这样写&#xff1a;[ 注&#xff1a;下面用红色部分标记的地方是后来添加上去…...

wordpress积分兑换插件/打开一个网站

19考研早已尘埃落定&#xff0c;我可以说是过了很长一阵才缓过来&#xff0c;今天还是决定简单地记录一下&#xff0c;既可以是一份回忆&#xff0c;也可以是一种鞭策。时间回退到2018年年初&#xff0c;那年我大四&#xff0c;当时的我已经签了工作&#xff0c;但和互联网压根…...

乌鲁木齐疫情最新消息/站长工具seo查询软件

上文中主要介绍了Kafka 的消费位移从Zookeeper 转移到了自己管理。本文主要介绍一下位移的提交方式。 Consumer 需要向 Kafka 汇报自己的位移数据&#xff0c;这个汇报过程被称为提交位移。因为 Consumer 能够同时消费多个分区的数据&#xff0c;所以位移的提交实际上是在分区粒…...