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

news2025/6/8 11:02:46

一、数据类型转换

  • 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开销。

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

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

相关文章

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…

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; 项…

GIC700组件

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

有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件

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

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

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

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

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

【论文解读】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; 双链表 插入 第一步要在第四步之前&…

基于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…

日志收集工具-Filebeat

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

Vue3学习(4)- computed的使用

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

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

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

如何在Unity中实现点击一个按钮跳转到哔哩哔哩

1.创建一个按钮 2.编写一个脚本&#xff08;你可以把链接改成你想要跳转的网站&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class JumpToBilibili : MonoBehaviour {void Start(){gameObject.…

PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)

文章目录 QLineEdit 介绍常用方法QLineEdit.EchoMode 取值光标相关方法文本选择方法输入格式化字符&#xff08;Input Mask&#xff09;常用信号QLineEdit 实例 QLineEdit 介绍 QLineEdit 是 PySide6&#xff08;Qt for Python&#xff09;中用于单行文本输入的控件。它支持文本…

【数据结构】6. 时间与空间复杂度

文章目录 一、算法效率1、算法的复杂度 二、时间复杂度1、时间复杂度的概念2、大O的渐进表示法3、常见时间复杂度计算1&#xff09;实例12&#xff09;实例23&#xff09;实例34&#xff09;实例45&#xff09;实例56&#xff09;实例67&#xff09;实例78&#xff09;实例8 三…