Python选择文件夹CSV绘图时出现FileNotFoundError问题求助
问题分析与解决方案
你的代码出现FileNotFoundError的核心问题是没有正确记录CSV文件的完整路径,并且在构建文件路径时混淆了子目录列表和文件列表的索引对应关系。咱们一步步拆解问题:
错误根源
- 你用
os.walk遍历到了所有CSV文件,但只把文件名存进了files列表,丢失了文件所在的子目录信息; folder_data是用os.listdir(path)生成的子目录(或文件)列表,你给每个元素加了反斜杠,但用户选择的编号是对应files列表的索引,用这个索引去取folder_data的元素完全不匹配,导致拼接出来的路径根本不是目标文件的真实路径。
修正后的代码
import os import pandas as pd import matplotlib.pyplot as plt path = "F:\\Users\\Desktop\\Data\\Summary" # 存储每个CSV文件的完整路径 file_paths = [] # 遍历目录,记录所有CSV文件的完整路径 for root, dirs, files in os.walk(path): for file in files: if file.endswith('.csv'): # 用os.path.join自动拼接路径,避免手动处理反斜杠的错误 full_path = os.path.join(root, file) file_paths.append(full_path) # 打印带编号的文件列表(只显示文件名,更友好) for idx, full_path in enumerate(file_paths): file_name = os.path.basename(full_path) print(f"{idx}-{file_name}") # 获取用户选择的编号,加入简单的输入验证 while True: try: csv_idx = int(input("\nEnter corresponding code to plot: ")) if 0 <= csv_idx < len(file_paths): break else: print(f"请输入0到{len(file_paths)-1}之间的有效编号!") except ValueError: print("请输入数字格式的编号!") # 直接使用对应的完整路径读取文件 target_path = file_paths[csv_idx] df = pd.read_csv(target_path, header=None) df1 = df.iloc[:, 0:2] plt.plot(df1[0], df1[1]) plt.show() # 补充显示图像的代码,原代码遗漏了这一步
关键改动说明
- 用
file_paths列表存储每个CSV文件的完整绝对路径,通过os.path.join自动处理路径拼接,彻底避免手动加反斜杠的错误; - 打印选择列表时,用
os.path.basename提取文件名,既保持选择的友好性,又不丢失真实的文件路径信息; - 用户选择编号后,直接从
file_paths中取出对应的完整路径,完全解决了索引不匹配的问题; - 加入了输入验证逻辑,避免用户输入无效编号导致的报错;
- 补充了
plt.show(),确保绘制的图像能正常显示。
内容的提问来源于stack exchange,提问作者Anand Patil
相关产品推荐
相关产品推荐

