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

Python 数据类型转换、编码处理与文件操作实战指南

一、数据类型转换

  • int (整型) 与 str (字符串) 之间:

    • strintint("123") (要求字符串内容必须是数字)。

    • intstrstr(123)

    • 规则: 使用目标类型的英文名加括号包裹原数据即可。

  • list (列表) 与 tuple (元组) 之间:

    • listtupletuple([1, 2, 3])

    • tuplelistlist((1, 2, 3))

  • liststr 之间:

    • strlistlist("abc")['a', 'b', 'c'] (意义不大)。

    • liststrstr([1, 2, 3])'[1, 2, 3]' (意义不大)。

  • listtupledict (字典) 之间:

    • 非直接转换。需提供依据(如键或值)。

    • 字典转列表(仅获取键):list(my_dict.keys())

    • 字典转列表(仅获取值):list(my_dict.values())

  • 其他类型转换为 bool (布尔值):

    • 记住以下值转换为 False 0 (数字零), "" (空字符串), {} (空字典), [] (空列表), () (空元组), None

    • 其他所有值均转换为 True

    • if 条件语句中,可以直接跟一个值,Python会自动将其转换为布尔值判断真假。

二、None 类型

  • 含义: 代表空数据或空值,等价于其他语言中的 null

  • 作用: 在变量初始值为空时,使用 None 避免不必要的内存开辟。例如,v1 = Nonev1 = ""v1 = 0 更高效,因为它指向一个固定的空地址,不会额外创建空对象。

  • 布尔转换: None 转换为布尔值时为 False

三、编码与字节

  • 历史演进:

    • ASCII: 早期编码,1字节(8位),256个字符,主要包含英文、数字、符号。

    • GB2312/GBK: 中国等亚洲国家为支持中文等文字开发的编码,通常2字节。

    • Unicode (万国码): 包含全球所有文字的字符集,支持最长4字节表示。

  • 存储与传输问题:

    • Python内部字符串基于Unicode(通常每个字符占4字节)。

    • Unicode虽全面,但占空间大,不适合网络传输和文件存储(浪费流量和存储)。

  • UTF-8:

    • 对Unicode进行压缩处理,变长编码(1-4字节)。

    • ASCII字符占1字节,中文字符通常占3字节。

    • 常用场景: 网络传输和文件存储。

  • 字符串 (str) 与字节 (bytes) 转换:

    • encode() 将字符串(Unicode)转换为字节(如UTF-8编码)。

      • my_str.encode('utf-8') → 得到bytes类型数据(用于写入文件或网络传输)。

    • decode() 将字节(如UTF-8编码)转换回字符串(Unicode)。

      • my_bytes.decode('utf-8') → 得到str类型数据(用于读取文件或网络接收数据后的处理)。

四、文件操作

  • 基本三步:

    1. 打开文件: open(file_path, mode)

    2. 操作文件: 读取 (read()) 或 写入 (write())

    3. 关闭文件: f.close() (重要,释放资源,确保数据写入硬盘)

  • 文件路径:

    • 相对路径: 相对于当前Python脚本的运行目录(如'db.txt')。

    • 绝对路径: 文件的完整路径(如'D:\\my_project\\db.txt'),Windows路径前加r避免转义符问题。

  • 打开模式 (mode):

    • 'w' (write): 写入模式。如果文件不存在则创建;如果文件存在,会先清空所有内容,再写入新内容。

    • 'a' (append): 追加模式。如果文件不存在则创建;如果文件存在,保留原有内容,并在文件末尾追加新内容。

    • 'r' (read): 读取模式。文件必须存在,否则报错。

    • 'b' (binary): 二进制模式(配合w/a/r使用,如'wb', 'ab', 'rb')。用于处理非文本数据(如图片、视频)或经过编码的文本字节流。

      • 'wb' / 'ab':写入时必须传入 bytes 类型数据。

      • 'rb':读取时得到 bytes 类型数据。

  • 写入文件:

    • 文本写入:f.write(my_string.encode('utf-8')) (文本需先编码为字节)。

    • 换行符:\n

    • f.flush() 强制将内存中的数据立即写入硬盘,确保数据不丢失(在频繁写入但不需要立即关闭文件时有用)。

    • 优化: 尽可能在程序开始时打开文件,多次写入后在程序结束时关闭,减少频繁打开关闭的性能开销。

  • 读取文件:

    • f.read():读取文件所有内容,返回 bytes 类型数据。

    • 关键步骤: my_bytes.decode('utf-8') 将读取到的字节数据解码为字符串,方便后续处理。

    • 字符串处理:

      • my_str.strip():移除字符串两端的空白字符(包括空格、制表符、换行符\n)。

      • my_str.split('\n'):根据换行符将字符串切割成列表,每项代表一行。

      • line.split(','):根据逗号切割单行数据。

五、实践案例 

  • 用户注册存储到文件:

    • 获取用户名、密码、邮箱。

    • 将它们格式化为一行字符串(如"用户名,密码,邮箱\n")。

    • 将该行字符串编码为UTF-8字节。

    • 使用'ab'模式打开文件,写入字节数据。

    • 使用f.flush()确保每条注册信息及时写入硬盘。

  • 下载网络数据并处理:

    • 使用requests.get(url)获取网络响应。

    • res.content:获取原始响应内容(通常是字节类型,如UTF-8编码的文本或图片二进制数据)。

    • 如果内容是文本:res.content.decode('utf-8')还原为字符串,再进行替换、解析等操作。处理后的字符串再encode('utf-8')写入文件。

    • 如果内容是图片:直接将res.content写入以'wb'模式打开的文件。

  • 读取文件信息并构建数据结构:

    • 使用'rb'模式打开文件。

    • f.read().decode('utf-8').strip():读取并解码为字符串,去除两端多余的换行。

    • my_str.split('\n'):按行分割得到列表。

    • 遍历列表中的每一行,line.split(',')按逗号分割,获取所需数据(如股票代码和名称)。

    • 将获取到的数据构建成目标字典格式。

  • 下载图片:

    • 获取图片URL。

    • requests.get(image_url).content获取图片二进制数据。

    • 使用'wb'模式打开本地文件路径(文件名可从图片数据中提取)。

    • 将图片二进制数据写入文件。

注意事项

  • 编码陷阱:处理非 UTF-8 编码文件时需指定正确编码(如gbk),避免乱码。
  • 资源管理:使用with open()语法自动关闭文件,替代手动close(),防止资源泄漏。
  • 性能优化:批量写入替代频繁单次写入,减少open/close开销。

相关文章:

Python 数据类型转换、编码处理与文件操作实战指南

一、数据类型转换 int (整型) 与 str (字符串) 之间: str 转 int:int("123") (要求字符串内容必须是数字)。 int 转 str:str(123)。 规则: 使用目标类型的英文名加括号包裹原数据即可。 list (列表) 与 tuple (元组…...

Readest(电子书阅读器) v0.9.53

Readest 是一款开源电子书阅读器,专为沉浸式和深度阅读体验而设计。它是对Foliate的现代重写,利用Next. js 15和Tauri v2在macOS、Windows、Linux和Web上提供无缝的跨平台体验,并即将支持移动平台。 软件特色 多格式支持 支持EPUB、MOBI、K…...

USART 串口通信全解析:原理、结构与代码实战

文章目录 USARTUSART简介USART框图USART基本结构数据帧起始位侦测数据采样波特率发生器串口发送数据 主要代码串口接收数据与发送数据主要代码 USART USART简介 一、USART 的全称与基本定义 英文全称 USART:Universal Synchronous Asynchronous Receiver Transmi…...

Matlab | matlab中的图像处理详解

MATLAB 图像处理详解 这里写目录标题图像处理 MATLAB 图像处理详解一、图像基础操作1. 图像读写与显示2. 图像信息获取3. 图像类型转换二、图像增强技术1. 对比度调整2. 去噪处理3. 锐化处理三、图像变换1. 几何变换2. 频域变换四、图像分割1. 阈值分割2. 边缘检测3. 区域分割五…...

UOS无法安装deb软件包

UOS无法安装deb软件包 问题描述解决办法: 关闭安全中心的应用隔离结果验证 问题描述 UOS安装Linux微信的deb包时,无法正常安装 解决办法: 关闭安全中心的应用隔离 要关闭-安全中心的应用隔离后才可以正常软件和运行。 应用安全----》 允许任意应用。 结果验证 # …...

VUE前端实现自动打包成压缩文件

VUE前端实现自动打包成压缩文件 背景思路实现打包代码实现 尾巴 背景 做前端开发的兄弟们都经历过每次开发完成之后发包需要进行打包,然后将打包文件压缩。每次打好包了都得手动压缩一遍,就有点繁琐。今天我们就使用一种命令行自动压缩的方法&#xff0…...

2025政务服务便民热线创新发展会议顺利召开,张晨博士受邀分享

5月28日,由新华社中国经济信息社、新华社广东分社联合主办的2025政务服务便民热线创新发展暨“人工智能热线”会议在广州举行。会议围绕“人工智能与新质热线”主题,邀请全国的12345政务服务便民热线主管部门负责人、省市热线负责人和专家学者&#xff0…...

【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!

PDF批量删除固定位置图片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介绍&#x1f973; 主要功能&#x1f92a; 软件使用&#x1f92a; 参数解释&#x1f92a; 关键代码&#x1f929; 项…...

SpringAI Alibaba实战文生图

1️⃣ 前置准备&#xff1a;搭建开发环境与服务配置&#x1f680; &#x1f527; 1.1 环境要求 JDK 17&#xff08;推荐 JDK 21&#xff09;、Spring Boot 3.x&#xff08;本案例使用 3.3.4&#xff09;、阿里云百炼大模型服务 API Key。需在阿里云控制台完成服务开通并获取有…...

GIC700组件

GIC700包含了几个重要的组件,它们使用一个内部的GIC互联,用于在不同的组件之间使用AXI5-Stream接口进行路由。 1. Distributor(GICD) gicd是GIC700中所有组件之间的主要通信节点。它作为SPI的管理者以及维护LPI的cache,并且与其它chip上的GIC700组件进行通信。当支持GIC…...

几种简单的排序算法(C语言)

目录 1 简介 2 冒泡排序 2.1 基本思路 2.2 代码实现 3 选择排序 3.1 基本思路 3.2 代码实现 4 插入排序 4.1 基本思路 4.2 代码实现 5 快速排序 5.1 基本思路 5.2 代码实现 6 归并排序 6.1 基本思路 6.2 代码实现 7 基数排序 7.1 基本思路 7.2 代码实现 8 …...

RTOS学习之重难点

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件

有没有 MariaDB 对应 MySQL CONNECTION_CONTROL 插件 背景 写这篇文章的目的是因为昨晚半夜突然被call起来&#xff0c;有一套系统的mysql数据库启动失败了。尝试了重启服务器也不行。让我协助排查一下问题出在哪。 分析过程 一开始拿到服务器IP地址&#xff0c;就去数据库…...

setting up Activiti BPMN Workflow Engine with Spring Boot

spring.activiti.database-schema-update: true Controls how Activiti handles its database tables on startup. Options: true – Default. Creates or updates tables automatically if missing. ✅ Good for development. false – Disables auto-update. Throws an err…...

使用 C/C++ 和 OpenCV 提取图像的感兴趣区域 (ROI)

使用 C/C 和 OpenCV 提取图像的感兴趣区域 (ROI) 在计算机视觉中&#xff0c;感兴趣区域 (Region of Interest, ROI) 是指从图像中选择的一个特定区域&#xff0c;我们希望对其进行进一步的处理或分析。例如&#xff0c;在人脸识别中&#xff0c;ROI 就是包含人脸的矩形框。Op…...

TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)

这周&#xff0c;我进行了历史记录的设计与制作&#xff0c;我对于每一个用户与智能体交互得出的历史行程的数据进行了存储与可视化展示。 首先&#xff0c;我设置了一个csv文件存储每一个得出的行程规划&#xff0c;注意这里的地图我设置了一个全路径进行存储&#xff0c;这样…...

如何用AI高效运营1000+Tiktok矩阵账号

在当今数字化的时代&#xff0c;Tiktok 矩阵账号运营成为了众多企业和个人追求流量与变现的重要手段。然而&#xff0c;面对众多的账号管理&#xff0c;如何高效运营成为了关键。此时&#xff0c;AI 工具的出现为我们提供了强有力的支持。 一、Tiktok 矩阵账号的重要性 Tiktok…...

杭州瑞盟 MS35774/MS35774A 低噪声256细分微步进电机驱动,用于空调风门电机驱动,香薰电机驱动

杭州瑞盟 MS35774/MS35774A 低噪声256细分微步进电机驱动&#xff0c;用于空调风门电机驱动&#xff0c;香薰电机驱动 简述 MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片&#xff0c;芯片内置功率 MOSFET &#xff0c;长时间工作的平均电 流可以达到 1…...

【论文解读】Toolformer: 语言模型自学使用工具

1st author: ‪Timo Schick‬ - ‪Google Scholar‬ paper: Toolformer: Language Models Can Teach Themselves to Use Tools | OpenReview NeurIPS 2023 oral code: lucidrains/toolformer-pytorch: Implementation of Toolformer, Language Models That Can Use Tools, by…...

408第一季 - 数据结构 - 线性表II

链表 头节点始终指向第一个 头节点的好处&#xff1a; 第一个好处 这里L是头节点 可以发现&#xff0c;删除第一个也可以统一了 第二个好处 这是无头节点&#xff0c;空和非空指向的不一样 然后有头节点就可以统一了&#xff01; 双链表 插入 第一步要在第四步之前&…...

网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层

网络通讯分层 网络通讯分层是为了将复杂的网络通信问题分解为多个独立、可管理的层次&#xff0c;每个层次专注于特定功能。目前主流的分层模型包括OSI七层模型和TCP/IP四层&#xff08;或五层&#xff09;模型&#xff0c;以下是详细解析&#xff1a; 一、OSI七层模型&#…...

Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决

如果你的Obsidian文档在Linux与Windows间来回切换&#xff0c;可能会涉及到文件的保存换行符问题&#xff0c;但这样的话就容易导致一个问题&#xff0c;那就是内容无差异&#xff0c;Obsidian却提示unexplained changes&#xff0c;Windows系统下的解决方法如下&#xff0c;找…...

基于VMD-LSTM融合方法的F10.7指数预报

F10.7 Daily Forecast Using LSTM Combined With VMD Method ​​F10.7​​ solar radiation flux is a well-known parameter that is closely linked to ​​solar activity​​, serving as a key index for measuring the level of solar activity. In this study, the ​​…...

35 C 语言字符串转数值函数详解:strtof、strtod、strtold(含 errno 处理、ERANGE 错误)

1 strtof() 函数 1.1 函数原型 #include <stdlib.h> // 必须包含这个头文件才能使用 strtof() #include <errno.h> // 包含 errno 和 ERANGE #include <float.h> // 包含 FlOAT_MAX 和 FLOAT_MIN #include <math.h> // 包含 HUGE_VALF(inf)float…...

解决 idea提示`SQL dialect is not configured` 问题

前言 在 Java 开发中&#xff0c;尤其是使用 IntelliJ IDEA 或 MyBatis 等框架时&#xff0c;开发者常会遇到 SQL dialect is not configured 的警告或错误。这一问题不仅影响代码的高亮和智能提示功能&#xff0c;还可能导致表结构解析失败、语法校验失效等问题。 一、问题分…...

springboot的test模块使用Autowired注入失败

springboot的test模块使用Autowired注入失败的原因&#xff1a; 注入失败的原因可能是用了junit4的包的Test注解 import org.junit.Test;解决方法&#xff1a;再加上RunWith(SpringRunner.class)注解即可 或者把Test由junit4改成junit5的注解&#xff0c;就不用加上RunWith&…...

日志收集工具-Filebeat

提示&#xff1a;windows 环境下 Filebeat 的安装与使用 文章目录 前言一、安装二、配置部署三、启动测试 前言 Filebeat 一般用于日志采集&#xff0c;由两部分组成 &#xff1a;Harvesters 和 prospector Harvesters采集器&#xff1a;逐行读取单个文件的内容&#xff0c;并…...

【PCIe总线】 -- PCI、PCIe相关实现

PCI、PCIe相关概念和知识点 【PCIe总线】-- PCI、PCIe基础知识点整理 【PCIe】非常适合初学的pcie博客(PCIe知识整理) PCIe具体实现 【PCIe】如何获取PCIe的BAR空间大小&#xff1f;...

Vue3学习(4)- computed的使用

1. 简述与使用 作用&#xff1a;computed 用于基于响应式数据派生出新值&#xff0c;其值会自动缓存并在依赖变化时更新。 ​缓存机制​&#xff1a;依赖未变化时直接返回缓存值&#xff0c;避免重复计算&#xff08;通过 _dirty 标志位实现&#xff09;。​响应式更新​&…...

手机上网可以固定ip地址吗?详细解析

在移动互联网时代&#xff0c;手机已成为人们日常上网的主要设备之一。无论是工作、学习还是娱乐&#xff0c;稳定的网络连接都至关重要。许多用户对IP地址的概念有所了解&#xff0c;尤其是固定IP地址的需求。那么&#xff0c;手机上网能否固定IP地址&#xff1f;又该如何实现…...