为何pd.read_sas()可读取单个SAS文件,遍历文件夹时却报文件不存在?
解决SAS文件批量转CSV的FileNotFoundError问题
你遇到的问题有两个核心原因,对应修正如下:
文件路径不完整
os.listdir()返回的只是文件夹里的文件名,不是完整路径。直接用这个文件名调用pd.read_sas()时,程序会在当前工作目录里找文件,而不是你指定的SAS文件目录,所以报找不到文件。需要用os.path.join()把SAS文件所在目录和文件名拼接成完整路径。CSV文件名生成错误
你用sasfile(这是读取后得到的DataFrame对象)来格式化CSV路径,这会导致生成的文件名变成DataFrame的字符串形式,完全不符合预期。应该提取原SAS文件的文件名,去掉.sas7bdat后缀后作为CSV文件名。
修正后的完整代码:
import os import pandas as pd # SAS文件所在目录 sas_dir = r"\\path\to\sas\tables" # CSV输出目录 csv_dir = r"\\path\to\csv\tables" # 确保输出目录存在,不存在则创建 os.makedirs(csv_dir, exist_ok=True) for file in os.listdir(sas_dir): if file.endswith(".sas7bdat"): # 拼接完整的SAS文件路径 sas_file_path = os.path.join(sas_dir, file) # 读取SAS文件(返回的本身就是DataFrame,无需二次转换) df = pd.read_sas(sas_file_path) # 提取文件名(去掉后缀) file_name = os.path.splitext(file)[0] # 拼接CSV输出路径 csv_file_path = os.path.join(csv_dir, f"{file_name}.csv") # 保存为CSV,index=False避免输出多余索引列(可选) df.to_csv(csv_file_path, index=False)
额外说明:
- 新增
os.makedirs(csv_dir, exist_ok=True),避免因输出目录不存在导致报错; pd.read_sas()返回的直接是DataFrame类型,无需再用pd.DataFrame()转换;index=False可根据需求选择,去掉后不会把DataFrame的索引列写入CSV文件。
内容的提问来源于stack exchange,提问作者Renée
相关产品推荐
相关产品推荐

