从JSON切换到Yaml配置文件时,蛇文件中的字符串索引错误

时间:2019-06-10 21:20:39

标签: python yaml snakemake

我使用JSON格式的配置文件在Snakemake中编写了一个简单的ChIP-seq管道,并且按预期运行了试运行。进一步阅读最佳做法后,我切换到yaml格式的配置文件,并进行了我认为适当的更改,但是现在我收到了“字符串索引必须为整数错误”。

该管道尽可能使用包装程序运行Trimmomatic,FastQC,Bowtie2和MACS2。为了简单起见,我仅包含Trimmomatic和FastQC代码,因为我认为问题在于读取配置文件。配置文件包含样本(三个csv文件),目录(用于创建一致的目录结构),输出文件基本名称和序列数据(基因组等)。

config.yaml

---

samples:
  sample_names:samples.csv
  sample_files:files.csv
  sample_comparisons:comps.csv
directories:
  base_dir: /base/
  sample_dir: Samples/
  seq_dir: Raw_Sequences/
  trim_dir: Sequences/
  aln_dir: Alignments/
  peak_dir: Peak_Calling/
  logs_dir: Logs/
out_base: base
ref_seq_data:
  genome:<genome directory>
  bt2_index:<bowtie2 index directory>

...

Snakefile

import pandas as pd

shell.prefix("set -euo pipefail; ")

configfile: "config.yaml"

sample_names = config["samples"]["sample_names"]
sample_files = config["samples"]["sample_files"]
sample_comparisons = config["samples"]["sample_comparisons"]
base_dir = config["directories"]["base_dir"]
sample_dir = config["directories"]["base_dir"]+config["directories"]["sample_dir"]
seq_dir = config["directories"]["seq_dir"]
trim_dir = config["directories"]["sample_dir"]+config["directories"]["trim_dir"]
aln_dir = config["directories"]["sample_dir"]+config["directories"]["aln_dir"]
peak_dir = config["directories"]["sample_dir"]+config["directories"]["peak_dir"]
log_dir = config["directories"]["sample_dir"]+config["directories"]["logs_dir"]
genome = config["ref_seq_data"]["genome"]
out_base = config["out_base"]

samples = pd.read_csv(sample_names, index_col="sample")
files = pd.read_csv(sample_files, index_col = "sample")
comparisons = pd.read_csv(sample_comparisons)

rule all:
  input:
    expand(log_dir+"{sample}_{read}_fastqc.html", sample = samples, read = [1,2])

# Load Rules

include: "Snakemake_rules/NGS_QC.smk"

我收到的错误消息是:

  Snakefile的第7行中的

TypeError:   字符串索引必须为整数

当使用JSON格式的配置文件时,我没有将它分成几组(每行都是独立的),当使用config []调用这些行时,它正确地分配了正确的值。

我所见过的大多数讨论都涉及迭代,因此我不确定为什么使用yaml格式的文件时会在这里发生错误。

1 个答案:

答案 0 :(得分:1)

问题出在您的config.yaml文件中。

samples:
  sample_names:samples.csv
  sample_files:files.csv
  sample_comparisons:comps.csv

键和值应以冒号分隔,后跟空格。我猜想在您的情况下,YAML分析器将samples部分不视为字典,而是视为字符串列表:config["samples"] == ["sample_names:samples.csv", "sample_files:files.csv", "sample_comparisons:comps.csv"]

正确的配置应为:

samples:
  sample_names: samples.csv
  sample_files: files.csv
  sample_comparisons: comps.csv