社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

30天入门Python(基础篇)——第13天:IO编程

码上编程学习社 • 8 月前 • 328 次点击  

资料已经打包好了,需要的关注公众号发送“111”领取

“辛苦写的学生成绩统计代码,关掉程序数据就没了?”

“想把爬虫爬来的信息存成文档,却不知道怎么下手?”

——之前写的代码都是“内存级”的,程序一关数据全丢。今天咱们学文件操作的四大核心技能,让代码既能“读”懂电脑里的文档,又能“写”出数据到文件,实现数据永久保存,这才是实用程序的入门标配。

一、文件读写:最基础的“数据存取”

文件读写就像“用笔记本记东西”:打开笔记本(打开文件)→ 写内容(写文件)/ 看内容(读文件)→ 合上笔记本(关闭文件)。Python用open()函数打开文件,搭配read()/write()方法完成读写,核心是“打开后必须关闭”,但用with语句能自动关闭,新手必学。

# 1. 写文件:保存学生成绩到txt文档# with语句自动关闭文件,不用手动写close()with open("student_scores.txt""w", encoding="utf-8"as f:    # "w"是写入模式,会覆盖原有内容;"a"是追加模式,在末尾加内容    f.write("小明 85\n")  # \n是换行符    f.write("小红 92\n")    f.write("小李 78\n")print("成绩已保存到文件")# 2. 读文件:从txt文档中读取成绩with open("student_scores.txt""r", encoding="utf-8"as f:    # 方法1:读全部内容    all_content = f.read()    print("全部成绩:\n", all_content)    # 方法2:逐行读(适合大文件,不占内存)    f.seek(0)  # 把读取指针移回文件开头    for line in f:        name, score = line.strip().split()  # 处理换行和空格        print(f"姓名:{name},成绩:{score}")


避坑点:① 必须加encoding="utf-8",否则读写中文会乱码;② 写入模式“w”会清空原有内容,追加用“a”,只读用“r”,弄错会丢数据。

二、StringIO和BytesIO:内存里的“虚拟文件”

有时候不需要存真实文件,只是想在内存里临时“模拟文件操作”(比如处理爬虫获取的字符串),就用StringIO(处理文本)和BytesIO(处理二进制数据),速度比操作真实文件快10倍。

from io import StringIO, BytesIO# 1. StringIO:处理文本数据# 模拟写文件s_io = StringIO()s_io.write("语文 90\n")s_io.write("数学 95\n")# 模拟读文件s_io.seek(0)  # 指针移到开头print("StringIO内容:")print(s_io.read())  # 输出写入的科目成绩# 2. BytesIO:处理二进制数据(如图片、视频)b_io = BytesIO()# 写入二进制数据(字符串前加b)b_io.write(b"Python File Operation")# 读取二进制数据b_io.seek(0)print("\nBytesIO内容:", b_io.read().decode("utf-8"))  # decode转成字符串


核心用途:StringIO常用于处理爬虫响应的文本内容,BytesIO常用于处理下载的图片、音频等二进制文件,避免生成临时文件占用磁盘。

三、操作文件和目录:代码当“文件管理器”

想让代码自动创建文件夹、删除文件、查看目录下的文件?用os模块和pathlib模块就能实现,相当于用代码操作“我的电脑”,批量处理文件超方便。

import osfrom pathlib import Path# 1. 查看当前目录print


    
("当前目录:", os.getcwd())# 2. 创建文件夹(存成绩文档)os.makedirs("student_data", exist_ok=True)  # exist_ok=True避免文件夹已存在报错# 把之前的成绩文件移动到新文件夹(先关闭文件再操作)os.rename("student_scores.txt""student_data/student_scores.txt")# 3. 查看文件夹下的文件(pathlib更简洁,推荐)data_dir = Path("student_data")for file in data_dir.iterdir():    print(f"\n文件夹内文件:{file.name},是否为文件:{file.is_file()}")# 4. 删除文件(谨慎使用!)# os.remove("student_data/student_scores.txt")# 删除空文件夹# os.rmdir("student_data")


新手提醒:删除操作(os.remove/rmdir)不可逆,测试时先备份文件;pathlib是Python 3.4+的新模块,语法更直观,优先使用。

四、序列化:让数据“跨程序”传递

把Python的列表、字典存到文件里,直接写会变成乱码,这时候需要“序列化”——把数据转成特殊格式(如JSON),存到文件后,其他程序(甚至其他语言)也能读取。Python用json模块实现序列化,是前后端交互、数据存储的核心技能。

import json# 1. 准备Python数据(字典)student_info = {    "name""小明",    "age"16,    "scores": {"语文"85"数学"92},    "is_student"True}# 2. 序列化:Python数据转JSON字符串,写入文件with open("student_info.json""w", encoding="utf-8"as f:    # ensure_ascii=False让中文正常显示,indent=2格式化输出    json.dump(student_info, f, ensure_ascii=False, indent=2)print("字典已序列化保存")# 3. 反序列化:从JSON文件读取,转成Python数据with open("student_info.json""r", encoding="utf-8"as f:    loaded_info = json.load(f)    print("\n读取的学生信息:", loaded_info)    print("学生年龄:", loaded_info["age"])  # 像普通字典一样使用


核心优势:JSON格式是通用的数据格式,Python序列化的文件,Java、JavaScript等语言都能读取,实现“数据互通”;而且JSON文件是文本格式,用记事本就能打开编辑,非常灵活。

五、实战:学生信息管理系统(文件版)

把今天的知识点组合起来,写一个“能存能读”的学生信息管理功能,程序关掉数据也不会丢:

import jsonfrom pathlib import Path# 保存学生信息(序列化)def save_student(students):    # 确保文件夹存在    Path("data").mkdir(exist_ok=True)    with open("data/students.json""w", encoding="utf-8"as f:        json.dump(students, f, ensure_ascii=False, indent=2)# 读取学生信息(反序列化)def load_student():    file_path = Path("data/students.json")    if not file_path.exists():        return []  # 文件不存在返回空列表    with open(file_path, "r", encoding="utf-8"as f:        return json.load(f)# 测试:添加学生并保存students = load_student()new_student = {"name""小张""age"15"score"88}students.append(new_student)save_student(students)print("更新后的学生列表:", load_student())


今天的四个知识点,是数据持久化的基础:文件读写处理简单文本,StringIO/BytesIO优化内存操作,文件目录管理实现批量控制,序列化实现复杂数据的存储与互通。

新手重点掌握“with open()”和“json序列化”,这两个是日常开发中用得最多的技能,把之前写的函数和这两个技能结合,就能写出真正能“存住数据”的实用程序。

【今日任务】写一个“日记记录工具”:① 接收用户输入的日期和日记内容;② 把内容追加保存到“diary.txt”,格式为“2024-05-21:今天学了文件操作...”;③ 读取文件并打印所有日记内容。

最后

以上就是今天给你分享的内容,觉得有用的话欢迎点赞收藏哦!

如果你也对Python这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)

  Python零基础实战特训营 
三更老师亲自上课示范,2天:理论+实操教学+直播教学演示+课后辅导

获取方式:

1.关注下方公众号↓↓↓↓

2.点赞+再看

3.在后台发送:“python” 即可领取资料福利/开通上课权限

资料已经打包好了,需要的关注公众号发送“111”领取

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/190560