Python零基础教程第八课:与文件对话

浏览量:21 次 发布时间:2025-12-26 20:05 作者:明扬工控商城 下载docx

最近更新:Python零基础教程第七课:我的第一个工具箱——函数


欢迎来到第八课。前面我们学会了创建函数,让代码更加模块化和可重用。今天我们要学习一个非常实用的技能:文件操作。学会了文件操作,你的程序就可以读取和保存数据了,就像我们平时用记事本记录东西一样。

第一部分 为什么需要文件操作?

想象一下,你写了一个日记本程序,可以记录每天的心情。但是每次关闭程序后,记录的内容就消失了,下次打开又得重新写。这肯定不行!

文件操作可以让程序:

1.    保存数据:把用户输入的内容保存到文件中

2.    读取数据:下次打开程序时读取之前保存的内容

3.    处理数据:可以处理各种格式的文件(文本、CSV等)

第二部分 文件的读写基本操作

创建第一个文本文件
打开IDLE,新建一个文件:

代码部分:
创建和写入第一个文件

打开文件准备写入(如果文件不存在会自动创建)
文件对象 = open("我的日记.txt", "w", encoding="utf-8")

写入内容
文件对象.write("2023年10月15日 星期日\n")
文件对象.write("今天天气晴朗,我学习了Python。\n")
文件对象.write("感觉编程很有趣,要继续努力!\n")

关闭文件(非常重要!)
文件对象.close()

print("日记已保存到:我的日记.txt")

运行这个程序,你会在Python文件所在的文件夹里找到一个"我的日记.txt"文件,用记事本打开就能看到内容了。

读取文件内容

代码部分:
读取文件内容

print("开始读取日记内容:")
print("-" * 30)

打开文件准备读取
文件对象 = open("我的日记.txt", "r", encoding="utf-8")

读取全部内容
内容 = 文件对象.read()
print(内容)

关闭文件
文件对象.close()

print("-" * 30)
print("日记读取完毕")

第三部分 文件打开模式

打开文件时,需要指定模式,就像开门一样,有只读、只写、读写等模式。

常用文件打开模式

模式 r :只读模式(默认),如果文件不存在会报错
模式 w :写入模式,如果文件存在会清空内容,不存在会创建
模式 a :追加模式,在文件末尾添加内容,不存在会创建
模式 r+ :读写模式,可以读也可以写
模式 b :二进制模式,用于图片、视频等

不同模式的示例

代码部分:
追加模式示例
print("追加新内容到日记:")

使用追加模式打开文件
文件对象 = open("我的日记.txt", "a", encoding="utf-8")

文件对象.write("\n")
文件对象.write("2023年10月16日 星期一\n")
文件对象.write("今天继续学习Python,学会了文件操作。\n")

文件对象.close()

print("新内容已追加到日记")

第四部分 更安全的文件操作

直接使用open()和close()有个问题:如果程序在中间出错,可能无法正常关闭文件。Python提供了一个更好的方式:使用with语句。

使用with语句自动管理文件

代码部分:
使用with语句,更安全

写入文件
with open("我的笔记.txt", "w", encoding="utf-8") as 文件:
文件.write("Python学习笔记\n")
文件.write("1. 变量:存储数据的容器\n")
文件.write("2. 函数:可重用的代码块\n")
文件.write("3. 列表:有序的数据集合\n")

print("笔记已保存")

读取文件
with open("我的笔记.txt", "r", encoding="utf-8") as 文件:
内容 = 文件.read()
print("笔记内容:")
print(内容)

使用with语句的好处是:即使程序出错,文件也会自动关闭,不会丢失数据。

第五部分 不同的读取方式

根据不同的需求,我们可以用不同的方式读取文件。

逐行读取

代码部分:
逐行读取文件

print("逐行读取日记:")
print("-" * 30)

with open("我的日记.txt", "r", encoding="utf-8") as 文件:
行号 = 1
for 行 in 文件:
print(f"第{行号}行:{行}", end="")
行号 += 1

print("-" * 30)

读取所有行到列表

代码部分:
读取所有行到列表

print("将日记内容读取到列表:")

with open("我的日记.txt", "r", encoding="utf-8") as 文件:
所有行 = 文件.readlines()

print("总共有", len(所有行), "行")
print()

for i, 行 in enumerate(所有行):
print(f"行{i+1}: {行}", end="")

读取指定数量的字符

代码部分:
读取指定数量的字符

print("读取前50个字符:")

with open("我的日记.txt", "r", encoding="utf-8") as 文件:
部分内容 = 文件.read(50)
print(部分内容)
print("...")

第六部分 检查文件状态

在操作文件前,有时需要检查文件是否存在,文件大小等信息。

代码部分:
检查文件状态
import os

文件名 = "我的日记.txt"

检查文件是否存在
if os.path.exists(文件名):
print(f"文件 '{文件名}' 存在")

text

复制

下载
获取文件大小(字节)


文件大小 = os.path.getsize(文件名)
print(f"文件大小:{文件大小} 字节")
print(f" {文件大小/1024:.2f} KB")
检查是否是文件
if os.path.isfile(文件名):
    print("这是一个文件")
检查是否是文件夹
if not os.path.isdir(文件名):
    print("这不是一个文件夹")
    

else:
print(f"文件 '{文件名}' 不存在")

第七部分 小项目 日记本程序

现在让我们用文件操作知识制作一个实用的日记本程序。

第一步:创建新文件
新建文件,保存为"日记本程序.py"

第二步:基础版日记本

代码部分:
日记本程序 1.0

def 显示菜单():
显示主菜单
print("\n" + "=" * 30)
print(" 个人日记本")
print("=" * 30)
print("1. 写新日记")
print("2. 查看日记")
print("3. 退出程序")
print("=" * 30)

def 写日记():
写新日记
print("\n--- 写新日记 ---")

text

复制

下载
获取当前日期


import datetime
当前时间 = datetime.datetime.now()
日期 = 当前时间.strftime("%Y%m%d %A")
print(f"日期:{日期}")
内容 = input("请输入日记内容(输入'结束'完成):\n")
拼接完整的日记条目
日记条目 = f"\n{日期}\n"
日记条目 += f"{内容}\n"
日记条目 += "-" * 40
保存到文件
with open("日记本.txt", "a", encoding="utf-8") as 文件:
    文件.write(日记条目)
print("日记已保存!")

def 看日记():
查看日记
print("\n--- 我的日记 ---")

text

复制

下载
try:


    with open("日记本.txt", "r", encoding="utf-8") as 文件:
        内容 = 文件.read()
        
    if 内容:
        print(内容)
    else:
        print("日记本是空的,快去写第一篇日记吧!")
        
except FileNotFoundError:
    print("还没有日记,请先写一篇日记。")

主程序
def 主函数():
while True:
显示菜单()
选择 = input("请选择操作(1-3):")

text

复制

下载
    if 选择 == "1":


        写日记()
    elif 选择 == "2":
        看日记()
    elif 选择 == "3":
        print("\n谢谢使用日记本程序,再见!")
        break
    else:
        print("无效选择,请重新输入")

启动程序
if name == "main":
主函数()

第三步:增强版日记本

代码部分:
日记本程序 2.0

import datetime
import os

def 显示菜单():
显示主菜单
print("\n" + "=" * 40)
print(" 个人日记本 2.0")
print("=" * 40)
print("1. 写新日记")
print("2. 查看所有日记")
print("3. 按日期查找日记")
print("4. 删除日记")
print("5. 查看日记统计")
print("6. 退出程序")
print("=" * 40)

def 写日记():
写新日记
print("\n--- 写新日记 ---")

text

复制

下载
获取当前日期和时间


当前时间 = datetime.datetime.now()
日期 = 当前时间.strftime("%Y%m%d")
星期 = 当前时间.strftime("%A")
具体时间 = 当前时间.strftime("%H:%M:%S")
print(f"日期:{日期} {星期}")
print(f"时间:{具体时间}")
输入标题和内容
标题 = input("请输入日记标题:")
print("请输入日记内容(输入空行结束):")
内容行 = []
while True:
     = input()
    if  == "":
        break
    内容行.append()
内容 = "\n".join(内容行)
if not 内容:
    print("内容为空,未保存日记")
    return
拼接完整的日记条目
日记条目 = f"\n{'='*50}\n"
日记条目 += f"日期:{日期} {星期}\n"
日记条目 += f"时间:{具体时间}\n"
日记条目 += f"标题:{标题}\n"
日记条目 += f"{'='*50}\n"
日记条目 += f"{内容}\n"
日记条目 += f"{'='*50}\n"
保存到文件
with open("日记本.txt", "a", encoding="utf-8") as 文件:
    文件.write(日记条目)
print("\n日记已保存!")

def 看日记():
查看所有日记
print("\n--- 所有日记 ---")

text

复制

下载
try:


    with open("日记本.txt", "r", encoding="utf-8") as 文件:
        内容 = 文件.read()
        
    if 内容.strip():
        print(内容)
    else:
        print("日记本是空的,快去写第一篇日记吧!")
        
except FileNotFoundError:
    print("还没有日记,请先写一篇日记。")

def 找日记():
按日期查找日记
print("\n--- 查找日记 ---")

text

复制

下载
try:


    with open("日记本.txt", "r", encoding="utf-8") as 文件:
        所有内容 = 文件.read()
        
    if not 所有内容.strip():
        print("日记本是空的")
        return
    
    按分隔符分割日记
    日记列表 = 所有内容.split("=" * 50)
    
    获取查找日期
    查找日期 = input("请输入要查找的日期(格式:20231015日):")
    
    print(f"\n查找结果(日期包含'{查找日期}'的日记):")
    print("-" * 50)
    
    找到 = False
    for 日记 in 日记列表:
        if 查找日期 in 日记:
            print(日记)
            找到 = True
    
    if not 找到:
        print(f"没有找到日期为'{查找日期}'的日记")
        
except FileNotFoundError:
    print("还没有日记,请先写一篇日记。")

def 删除日记():
删除日记文件
print("\n--- 删除日记 ---")
print("警告:这将删除所有日记,无法恢复!")

text

复制

下载
确认 = input("确定要删除所有日记吗?(输入'y'确认):")


if 确认.lower() == "y":
    if os.path.exists("日记本.txt"):
        os.remove("日记本.txt")
        print("所有日记已删除")
    else:
        print("日记文件不存在")
else:
    print("取消删除")

def 日记统计():
查看日记统计信息
print("\n--- 日记统计 ---")

text

复制

下载
try:


    if not os.path.exists("日记本.txt"):
        print("还没有日记")
        return
    
    获取文件大小
    文件大小 = os.path.getsize("日记本.txt")
    print(f"日记文件大小:{文件大小} 字节")
    
    统计日记数量
    with open("日记本.txt", "r", encoding="utf-8") as 文件:
        内容 = 文件.read()
        
    通过分隔符计数日记数量
    日记数量 = 内容.count("=" * 50) // 2
    
    print(f"日记数量:{日记数量} ")
    
    统计行数和字数
    行数 = 内容.count("\n") + 1
    字数 = len(内容.replace("\n", "").replace(" ", ""))
    
    print(f"总行数:{行数} ")
    print(f"总字数:{字数} ")
    
except Exception as e:
    print(f"统计时出错:{e}")

主程序
def 主函数():
print("欢迎使用个人日记本程序!")

text

复制

下载
while True:


    显示菜单()
    选择 = input("请选择操作(1-6):")
    
    if 选择 == "1":
        写日记()
    elif 选择 == "2":
        看日记()
    elif 选择 == "3":
        找日记()
    elif 选择 == "4":
        删除日记()
    elif 选择 == "5":
        日记统计()
    elif 选择 == "6":
        print("\n谢谢使用日记本程序,再见!")
        break
    else:
        print("无效选择,请重新输入")

启动程序
if name == "main":
主函数()

第八部分 处理CSV文件

CSV文件是常见的数据格式,可以用Excel打开,Python也可以处理。

代码部分:
CSV文件操作示例

创建CSV文件
import csv

写入CSV文件
with open("学生成绩.csv", "w", newline="", encoding="utf-8") as 文件:
写入器 = csv.writer(文件)

text

复制

下载
写入标题行


写入器.writerow(["姓名", "语文", "数学", "英语", "总分"])
写入数据行
写入器.writerow(["小明", 85, 90, 88, 263])
写入器.writerow(["小红", 92, 88, 95, 275])
写入器.writerow(["小刚", 78, 85, 80, 243])

print("CSV文件已创建:学生成绩.csv")

读取CSV文件
print("\n读取CSV文件内容:")
print("-" * 30)

with open("学生成绩.csv", "r", encoding="utf-8") as 文件:
读取器 = csv.reader(文件)

text

复制

下载
for 行 in 读取器:


    print()

print("-" * 30)

用字典方式读取CSV(更方便)
print("\n用字典方式读取CSV:")

with open("学生成绩.csv", "r", encoding="utf-8") as 文件:
字典读取器 = csv.DictReader(文件)

text

复制

下载
for 行 in 字典读取器:


    print(f"姓名:{['姓名']},语文:{['语文']},数学:{['数学']},英语:{['英语']},总分:{['总分']}")

第九部分 文件操作的常见错误

错误1:文件路径错误

代码部分:
错误示例
with open("不存在的文件夹/文件.txt", "r") as 文件:
内容 = 文件.read()

解决方法:先检查路径是否存在
import os
路径 = "不存在的文件夹/文件.txt"

if os.path.exists(路径):
with open(路径, "r") as 文件:
内容 = 文件.read()
else:
print("文件或路径不存在")

错误2:编码问题

代码部分:
错误示例(中文内容可能乱码)
with open("中文文件.txt", "r") as 文件:
内容 = 文件.read() 可能显示乱码

正确做法:指定编码
with open("中文文件.txt", "r", encoding="utf-8") as 文件:
内容 = 文件.read() 正常显示中文

错误3:忘记关闭文件

代码部分:
错误示例(不使用with语句时)
文件 = open("测试.txt", "w")
文件.write("测试内容")
忘记写 文件.close() 文件可能没有正确保存

正确做法:总是使用with语句
with open("测试.txt", "w") as 文件:
文件.write("测试内容")
文件会自动关闭

第十部分 今天学到了什么

今天的内容非常实用,我们学会了:

1.    打开和关闭文件:使用open()和close()

2.    文件打开模式:r(读)、w(写)、a(追加)

3.    安全操作文件:使用with语句

4.    不同的读取方式:read()、readline()、readlines()

5.    文件状态检查:检查文件是否存在、文件大小等

6.    实际应用:制作日记本程序

7.    CSV文件处理:读写CSV格式数据

第十一


明扬工控商城

推荐阅读:

Python零基础教程第十一课 综合项目 智能聊天机器人

Python零基础教程第十课 认识新朋友 模块和包

Python零基础教程第九课:犯错了怎么办?——错误处理

Python零基础教程第八课:与文件对话

Python零基础教程第五课:重复的魔法——循环

Python零基础教程第七课:我的第一个工具箱——函数

Python零基础教程第八课:与文件对话.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网