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

如何从多份CSV文件创建Intake Catalog?求最佳实践

从多份CSV创建Intake Catalog的最佳实践

我需要为每份CSV文件创建独立的source,以此生成Intake Catalog。单个CSV的场景已经实现:

import intake
source1 = intake.open_csv('states_1.csv')
source1.name = 'states1'
with open('catalog.yml', 'w') as f:
    f.write(str(source1.yaml()))

生成的有效YAML内容:

sources:
  states1:
    args:
      urlpath: states_1.csv
    description: ''
    driver: intake.source.csv.CSVSource
    metadata: {}

但添加第二个CSV时,直接拼接两个source的yaml会导致重复的sources条目,YAML解析失败:

import intake
source1 = intake.open_csv('states_1.csv')
source1.name = 'states1'
source2 = intake.open_csv('states_2.csv')
source2.name = 'states2'
with open('catalog.yml', 'w') as f:
    f.write(str(source1.yaml()))
    f.write(str(source2.yaml()))

生成的无效YAML:

sources:
  states1:
    args:
      urlpath: states_1.csv
    description: ''
    driver: intake.source.csv.CSVSource
    metadata: {}
sources:
  states2:
    args:
      urlpath: states_2.csv
    description: ''
    driver: intake.source.csv.CSVSource
    metadata: {}

方法一:使用Intake Catalog对象管理(推荐)

实例化intake.Catalog对象,将多个source添加进去后再导出为YAML,这是Intake官方推荐的标准方式。

import intake
from intake.catalog import Catalog

# 创建空Catalog实例
catalog = Catalog()

# 逐个添加CSV source
source1 = intake.open_csv('states_1.csv')
catalog.add(source1, name='states1')

source2 = intake.open_csv('states_2.csv')
catalog.add(source2, name='states2')

# 将Catalog写入YAML文件
with open('catalog.yml', 'w') as f:
    f.write(catalog.yaml())

生成的有效YAML内容:

sources:
  states1:
    args:
      urlpath: states_1.csv
    description: ''
    driver: intake.source.csv.CSVSource
    metadata: {}
  states2:
    args:
      urlpath: states_2.csv
    description: ''
    driver: intake.source.csv.CSVSource
    metadata: {}

方法二:手动构建YAML字典

如果不想依赖Catalog对象,也可以手动构建包含所有source的字典,再通过YAML库导出:

import intake
import yaml

# 初始化sources字典
sources = {}

# 解析单个source的yaml并添加到字典
source1 = intake.open_csv('states_1.csv')
sources['states1'] = yaml.safe_load(source1.yaml())['sources']['states1']

source2 = intake.open_csv('states_2.csv')
sources['states2'] = yaml.safe_load(source2.yaml())['sources']['states2']

# 生成完整的Catalog结构并写入文件
catalog_dict = {'sources': sources}
with open('catalog.yml', 'w') as f:
    yaml.dump(catalog_dict, f, sort_keys=False)

此方法同样能生成结构合规的YAML文件。

内容的提问来源于stack exchange,提问作者Rich Signell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:16:11