上一篇,我们让系统具备了“判断能力”。布尔值解决的是状态表达,if / else解决的是策略分岔, 循环让判断可以批量发生。

但到这里,还有一个更现实的问题没有解决:数据从哪里来?处理完成之后,又到哪里去?

前几篇文章里,我们处理的数据,都是“写在代码里的”。变量、列表、字典,都是我们手动定义的。但真实世界的数据不是这样的。

真实世界的数据来自用户上传的文件、来自日志、来自导出的报表、来自下载的文本、来自外部系统……也就是说:自动化系统不仅需要“决策能力”,还需要“数据通道”。

这一篇,我们进入一个非常基础、但在产品与AI系统中极其核心的主题——文件读写(File I/O)与数据流动。

读取文件

在计算机内部,一切都是内存中的对象。但当你关掉程序,这些数据就消失了。

如果你希望保存分析结果、读取用户资料、批量处理日志、生成报告供下载等,你就必须使用文件。文件,是程序与现实世界之间的桥梁。

假设你正在做一个“用户反馈情绪分析器”。 用户每天会生成一个 .txt 文件,里面是他们的反馈内容。 我们第一步要做什么? 读取它。

CODE
f = open("feedback.txt", "r")
content = f.read()
f.close()

这三行代码做了一件非常简单却非常关键的事:把磁盘上的内容,加载到内存中,变成字符串。技术上: 

  • “r”表示读取模式(read)

  • f.read() 读取全部内容,并把文件内容变成一个字符串

  • f.close() 关闭文件并释放系统资源

更现代一点的写法是:

CODE
with open("feedback.txt", "r") as f:
    content = f.read()

with会自动关闭文件,这是Pythonic风格。

这里发生的本质是:磁盘 → 内存。也就是说,我们把现实世界的数据,转化成可以计算的对象。

读取文件最常见的路径问题

很多初学者在第一次读取文件时,遇到的不是语法错误,而是这一行报错:

CODE
FileNotFoundError:
    [Errno 2] No such file or directory

这句话翻译成大白话就是:Python找不到你说的那个文件。这不是因为 Python 不会读文件,而是你没有告诉它“文件在哪里”。

所以,文件问题,本质是路径问题。 

第一步:先知道文件在哪。

假设你电脑上有一个文件:daily_notes.txt,你必须先确认三件事:

1、文件真的存在吗? 

2、它在哪个文件夹里?

3、你的程序现在运行在哪个文件夹? 

第二步:查看当前工作目录。

Python默认会在“当前工作目录”里找文件。我们可以这样查看:

CODE
import os
print(os.getcwd())

输出可能是:D:\PythonProject。这说明你的程序正在D:\PythonProject这个文件夹里运行。

Python会优先在这个文件夹里寻找文件。如果你的.txt文件不在这里,就一定会报错。

第三步:查看当前目录下有什么文件。

继续使用os模块:

CODE
import os
print(os.listdir())

你会看到类似:[‘main.py’, ‘report.txt’, ‘data.csv’]的回答。

如果你想读取的文件不在这个列表里,说明它不在当前工作目录。这一步非常重要,很多人根本没确认文件是否真的在运行目录里。 

第四步:如何找到文件的完整路径。

在Windows系统中找到你的文件,按住Shift右键点击文件,选择“复制为路径” 。你会得到类似:

CODE
"C:\Users\Fangwen\Desktop\daily_notes.txt"

然后在Python里这样写:

CODE
with open("C:/Users/Fangwen/Desktop/daily_notes.txt", "r") as f:
   content = f.read()

注意两点:1、路径里的\可以改成/或者写成\\例如:

CODE
"C:\\Users\\Fangwen\\Desktop\\daily_notes.txt"

否则 \n 可能被误解为换行符。

而在Mac系统中,查看文件的路径方法更加简单,只需要将文件拖到终端即可。

当你开始关心:程序运行在哪?文件结构如何组织?数据存储在哪个层级?时,你已经从“写代码” 进入“设计系统结构”。

在真实AI产品中,文件路径往往意味着:数据仓库目录、日志存储目录、模型缓存目录、上传文件临时区等问题,路径设计,本质是架构设计的一部分。

批量读取文件:自动化真正开始发生

单个文件读取只是第一步,真正有意义的是批量处理。假设你有多个用户日志:

CODE
files = ["day1.txt", "day2.txt", "day3.txt"]

我们可以这样做:

CODE
for file in files:
    with open(file, "r") as f:
        text = f.read()
    print(file, "长度为:", len(text))

循环 + 文件读取 = 批量数据处理能力。

如果再加上AI:

CODE
for file in files:
    with open(file, "r") as f:
        text = f.read()
    prompt = f""" 判断下面文本情绪是 Positive 还是 Negative: {text} """
    result = get_llm_response(prompt)
    print(file, "->", result)

你已经构建了一个“情绪扫描系统”。Python负责数据流动,AI负责语义理解。这是现代自动化的标准分工。

写入文件

读取解决的是输入问题,写入解决的是输出问题。

假设我们做了一个“个人成长分析系统”,AI输出了结果:

CODE
analysis = """
    本周关键词:专注
    建议:减少干扰源,优化时间结构。
"""

我们希望保存它:

CODE
with open("weekly_report.txt", "w") as f:
    f.write(analysis)

这里的 “w” 表示写入模式(write)。

注意一个关键点:如果文件已经存在,它会被覆盖。

这在真实产品里意味着什么?意味着你要设计:是否覆盖? 是否追加? 是否版本存档?等等。

文件写入,是数据策略的一部分。

生成结构化输出

结构化的意思是,数据按照固定规则排列,便于程序理解。例如:

CODE
姓名,分数
张三,85
李四,92

这就是结构化格式。

它有列、有分隔符、有规则。对人类来说是表格,对程序来说是可解析的数据。因此,CSV是最简单的结构化格式。CSV的全称是Comma Separated Values,意思是“逗号分隔值”。 

假设你做了一个学习效率分析系统,AI 给出了每天的评分: 

CODE
scores = [
    ("Day1", 82),
    ("Day2", 90),
    ("Day3", 76)
]

我们可以生成CSV内容:

CODE
csv_content = "Date,Score\n"
for day, score in scores:
    csv_content += f"{day},{score}\n"
with open("score.csv", "w") as f:
    f.write(csv_content)

生成的文件内容是:

CODE
Date,Score
Day1,82
Day2,90
Day3,76

更高级一点的做法是让LLM直接生成结构化格式。例如:

CODE
prompt = f"""
    从下面文本中提取姓名和成绩。
    输出为 CSV 格式。
    不要多余解释。
    格式:Name,Score
"""

response = get_llm_response(prompt)

with open("result.csv", "w") as f:
    f.write(response)

这里发生了一件重要的事情——你开始用Prompt控制输出格式。这一步,是“工程化使用AI”的核心能力。

当你开始控制模型输出格式时,你其实在做“接口定义”。

一个完整的小案例:AI日记关键词提取器

假设你每天写日记,保存在不同文件里:

CODE
day1.txt
day2.txt
day3.txt

我们让AI自动提取每天的“核心关键词”,并保存为 CSV 文件。

CODE
files = ["day1.txt", "day2.txt", "day3.txt"]
all_keywords = "Date,Keyword\n"

for file in files:
    with open(file, "r") as f:
        text = f.read()
    prompt = f"""
    提取下面文本的一个核心关键词:
    {text}
    """
    keyword = get_llm_response(prompt)
    all_keywords += f"{file},{keyword}\n"

with open("keywords.csv", "w") as f:
    f.write(all_keywords)

你已经做了一个小型“关键词提取与结构化分析系统”,并且实际上已经做了用大模型来进行语义分析的事情。

你现在应该达到什么程度?

这一这一篇看完,希望你能够:

1、知道如何读取文件

2、知道如何写入文件

3、能够用循环批量处理多个文件

4、理解路径与工作目录

5、能把文件操作与AI结合形成完整流程


当你把这一阶段的内容串起来看,会发现我们讨论的从来不是零散的语法,而是一条完整的数据路径。真正的AI产品,并不是某个神秘模型在独立运作,而是一整套清晰的数据流在稳定运行。模型只是其中一环,结构才是核心。

当你开始用“输入—处理—判断—决策—输出—存储”这样的框架去理解问题时,编程语言就不再是目的,而只是表达工具。

你正在建立的,是一种系统建模能力——把现实世界的模糊问题,拆解为可定义的状态、可执行的逻辑和可流动的数据。这种能力,远比记住多少语法更重要。

接下来,我们会进入一个更真实的世界。因为现实系统不会永远按理想路径运行。文件可能缺失,数据可能异常,模型可能返回意料之外的结果。真正成熟的系统,并不是不会出错,而是在出错时仍然可控、可恢复、可追踪。

稳定性,才是智能系统走向生产环境的第一门槛。