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

Windows下DuckDB初学者遇无详情IOException,求排查方向

排查DuckDB Windows下CSV转Parquet的IOException

以下是几个常见的排查方向和解决方法:

  • 路径格式适配问题
    Windows系统默认使用反斜杠\作为路径分隔符,代码中手动拆分路径时用了正斜杠/,可能导致DuckDB解析路径出错。建议用os.path模块处理路径,自动适配系统格式:

    import os
    import glob
    PATH = 'stock_market_data/nasdaq'
    parquet_dir = os.path.join(PATH, 'parquet')
    os.makedirs(parquet_dir, exist_ok=True)  # 确保目标目录存在
    
    for filename in glob.iglob(os.path.join(PATH, 'csv', '*.csv')):
        base_name = os.path.splitext(os.path.basename(filename))[0]
        dest = os.path.join(parquet_dir, f'{base_name}.parquet')
        # 后续执行SQL逻辑
    
  • 目标目录未创建
    DuckDB不会自动创建输出目录,如果parquet文件夹不存在,写入时会抛出IOException。先手动创建该目录,或者在代码中添加os.makedirs(parquet_dir, exist_ok=True)来自动创建(如上例)。

  • 文件权限或占用问题

    • 检查CSV文件是否被其他程序(如Excel、记事本)占用,关闭后重试。
    • 确认当前用户对CSV所在目录和Parquet输出目录有读写权限。
  • CSV内容解析错误
    指定的dateformat='%d-%m-%Y'可能与实际CSV中的日期格式不匹配,或者存在无效日期值。可以单独测试单个CSV的读取:

    test_result = conn.execute(f"""
    SELECT * FROM read_csv('{filename}', header=True, dateformat='%d-%m-%Y', columns={{'Date': 'DATE', 'Low': 'DOUBLE', 'Open': 'DOUBLE', 'Volume': 'BIGINT', 'High': 'DOUBLE', 'Close': 'DOUBLE', 'AdjustedClose': 'DOUBLE'}}, filename=True)
    """).df()
    print(test_result.head())
    

    如果此步骤报错,说明是CSV数据格式问题,需要调整日期格式参数或清理脏数据。

  • SQL字符串拼接的转义问题
    如果CSV文件名包含空格、特殊字符(如&、@),直接拼接SQL语句会导致语法错误。改用参数化查询避免转义问题:

    conn.execute("""
    COPY (SELECT * FROM read_csv(?, header=True, dateformat='%d-%m-%Y', columns={'Date': 'DATE', 'Low': 'DOUBLE', 'Open': 'DOUBLE', 'Volume': 'BIGINT', 'High': 'DOUBLE', 'Close': 'DOUBLE', 'AdjustedClose': 'DOUBLE'}, filename=True)) 
    TO ? (FORMAT 'parquet')
    """, (filename, dest))
    
  • DuckDB版本兼容性
    尝试升级到最新稳定版DuckDB,或者降级到教程对应的版本,Windows平台的旧版本可能存在文件IO相关的bug。

内容的提问来源于stack exchange,提问作者Andrey Morais Labanca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:09