
本文介绍一种简洁可靠的方法,让用户通过输入序号从当前目录的csv文件列表中选择目标文件,并正确读取其全部内容,避免原代码中“匹配后继续遍历”的逻辑错误。
本文介绍一种简洁可靠的方法,让用户通过输入序号从当前目录的csv文件列表中选择目标文件,并正确读取其全部内容,避免原代码中“匹配后继续遍历”的逻辑错误。
原问题的核心缺陷在于:循环中使用共享计数器 p 判断序号匹配,但 p 的递增逻辑与文件筛选条件耦合过紧(仅在非匹配时 p += 1),导致一旦跳过某个CSV文件,后续所有文件的索引都会错位;更严重的是,内层循环未在匹配成功后终止,造成“选1却打印多个文件”的现象。
推荐采用分离关注点的设计:先收集所有CSV文件到有序列表,再直接通过用户输入的序号索引访问——既语义清晰,又杜绝边界错误。
以下是优化后的完整实现:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
import glob
def seeProject():
# 获取当前目录下所有 .csv 文件(按字母顺序,可稳定复现)
csv_files = glob.glob("*.csv")
# 若无CSV文件,提前提示并退出
if not csv_files:
print("No CSV files found in the current directory.")
return
# 打印带编号的菜单(从1开始编号)
for i, filename in enumerate(csv_files, 1):
print(f"{i}. {filename}")
# 安全输入:循环验证用户输入是否为有效序号
while True:
try:
choice = int(input("Which would you like to open? (Enter number): "))
if 1 <p><strong>关键改进说明:</strong> </p>
- ✅ 解耦逻辑:glob.glob("*.csv") 一次性获取全部CSV路径,消除重复遍历和计数器依赖;
- ✅ 健壮输入:try/except 捕获非数字输入,while 循环确保序号在合法范围内;
- ✅ 资源安全:with open(...) 自动关闭文件,避免句柄泄漏;
- ✅ 编码兼容:优先尝试 UTF-8,失败后回退 GBK(适用于中文Windows环境);
- ✅ 用户体验:空文件提示、错误反馈明确、输出无多余空行。
⚠️ 注意:glob.glob() 默认匹配当前工作目录。如需指定路径(如 "data/*.csv"),请传入完整模式字符串。此外,文件名排序依赖 glob 的默认行为(通常为字典序),若需按修改时间等排序,可在获取列表后调用 sorted(csv_files, key=os.path.getmtime) 等处理。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










