You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何pd.read_sas()可读取单个SAS文件,遍历文件夹时却报文件不存在?

解决SAS文件批量转CSV的FileNotFoundError问题

你遇到的问题有两个核心原因,对应修正如下:

  1. 文件路径不完整
    os.listdir()返回的只是文件夹里的文件名,不是完整路径。直接用这个文件名调用pd.read_sas()时,程序会在当前工作目录里找文件,而不是你指定的SAS文件目录,所以报找不到文件。需要用os.path.join()把SAS文件所在目录和文件名拼接成完整路径。

  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:07