Python 双层独立循环实现文件批量存储案例
在自动化办公和数据处理场景中,我们经常需要读取 Excel 表格中的数据,并根据配置生成对应的文件。例如,Excel 的一列记录文件名,另一列记录文件内容,目标是将内容写入到指定路径下的对应文件中。
本文将以实际案例演示如何利用 Python 的循环结构完成此任务,重点分析常见的逻辑陷阱及正确的解决方案。
场景说明
假设我们有一个 Excel 文件 TEST.xlsx,其中包含两列:
- 文件名:如
test1.txt,test2.txt - 文件内容:需要写入该文件的文本数据
我们需要遍历这两列数据,将内容写入到本地文件夹中。
环境准备
确保已安装 pandas 库用于处理 Excel 文件:
pip install pandas openpyxl
错误示范与原因分析
许多初学者在处理此类需求时,容易写出如下代码:
import pandas as pd
import os
excel_file = 'TEST.xlsx'
target_path = './output/'
# 创建目标文件夹(如果不存在)
os.makedirs(target_path, exist_ok=True)
read_excel = pd.read_excel(excel_file, sheet_name='输出文件内容')
print(read_excel)
table_name = read_excel['文件名']
table_content = read_excel['文件内容']
# 错误的写法:两个独立的循环
for a in table_name:
print(a) # 这里只是打印,a 的值会在循环结束后保留为最后一个值
for b in table_content:
file_path = target_path + a # 这里的 a 已经是第一个循环结束后的最后一个值
with open(file_path, 'w+', encoding='utf-8') as f:
f.write(b)
问题根源
上述代码看似逻辑清晰,但运行结果往往只有最后一个文件被正确命名,或者所有文件都使用了同一个文件名(即第一个循环遍历到的最后一个文件名)。
这是因为在 Python 中,for 循环变量具有作用域特性。当第一个循环结束时,变量 a 会保留最后一次迭代的值。随后的第二个循环开始执行时,它无法'回溯'获取第一个循环的所有值,只能使用当前内存中 a 的状态。


