欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > Python 数据类型转换、编码处理与文件操作实战指南

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

2025/6/21 5:15:08 来源:https://blog.csdn.net/m0_60311269/article/details/148497428  浏览:    关键词: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开销。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词