如何实现输入两个CSV文件名后用os查找并通过pandas读取?
优化后的CSV文件查找与读取函数
核心需求:编写自定义函数,接收两个CSV文件名,在系统下载目录中定位文件,找到后用pandas读取为DataFrame;无需GUI模块,重点解决文件查找与读取的逻辑问题。
优化后的实现代码
import pandas as pd import os def load_csv_from_downloads(file_name1, file_name2): # 获取系统通用的下载目录路径,跨平台兼容 downloads_dir = os.path.expanduser("~/Downloads") found_dfs = {} # 遍历下载目录下的所有文件 for file in os.listdir(downloads_dir): # 只处理CSV文件 if file.endswith('.csv'): # 检查是否是目标文件之一,避免重复读取 if file == file_name1 and file_name1 not in found_dfs: full_path = os.path.join(downloads_dir, file) found_dfs[file_name1] = pd.read_csv(full_path) elif file == file_name2 and file_name2 not in found_dfs: full_path = os.path.join(downloads_dir, file) found_dfs[file_name2] = pd.read_csv(full_path) # 找到两个目标文件后提前终止遍历,提升效率 if len(found_dfs) == 2: break # 整理未找到的文件列表 missing_files = [] if file_name1 not in found_dfs: missing_files.append(file_name1) if file_name2 not in found_dfs: missing_files.append(file_name2) if missing_files: print(f"未找到文件: {'、'.join(missing_files)}") return None, None else: return found_dfs[file_name1], found_dfs[file_name2] # 示例调用 df1, df2 = load_csv_from_downloads("data1.csv", "data2.csv") if df1 is not None and df2 is not None: print("成功读取第一个CSV文件:") print(df1.head()) print("\n成功读取第二个CSV文件:") print(df2.head())
关键优化点说明
- 通用路径处理:用
os.path.expanduser("~/Downloads")替代硬编码路径,适配Windows、macOS、Linux等不同系统的下载目录位置 - 完整文件路径:遍历文件时拼接目录与文件名得到完整路径,解决原代码中
pd.read_csv(file)仅在当前工作目录查找文件的问题 - 可靠的状态跟踪:用字典
found_dfs存储已找到的DataFrame,替代原代码依赖locals()的不可靠判断方式 - 高效遍历逻辑:找到两个目标文件后立即终止循环,减少不必要的遍历操作
- 清晰的错误提示:准确列出未找到的文件名,便于用户快速排查问题
内容的提问来源于stack exchange,提问作者enrique perez
相关产品推荐
相关产品推荐

