我看到越来越多的csv文件包含多个部分,每个部分都包含自己的表。例如,来自10XGenomics的这个文件:
[gene-expression]
reference,/path/to/transcriptome
[libraries]
fastq_id,fastqs,feature_types
gex1,/path/to/fastqs,Gene Expression
mux1,/path/to/fastqs,Multiplexing Capture
[samples]
sample_id,cmo_ids
sample1,CMO301
sample2,CMO303
有时候,节标题甚至嵌入在它们自己的行中,例如。
[gene-expression],,
reference,/path/to/transcriptome,
[libraries],,
fastq_id,fastqs,feature_types
gex1,/path/to/fastqs,Gene Expression
mux1,/path/to/fastqs,Multiplexing Capture
[samples],,
sample_id,cmo_ids,
sample1,CMO301,
sample2,CMO303,
有没有一个Python模块可以直接处理这种划分?我找不到如何用Pandas或csv
模块来做这件事。例如,从上面的两个例子中,我希望得到一个每节一个条目的字典,然后是每个节的列表列表。
有些部分有头,如果这也能被处理就好了,例如类似于csv.DictReader
。
虽然编写一个可以解析这个特定示例的解决方案并不是特别困难,但是产生一些在一般情况下工作的东西要困难得多,例如,解析一个简单的csv文件很容易用split
完成,但是csv
模块是400多行Python,还有更多的C行,所以我真正在这里寻找的是一个模块来处理这个问题。
PS:this question是相关的,但不幸的是,答案并没有解决csv解析器的问题
3条答案
按热度按时间0md85ypi1#
你可以使用
configparser
模块来读取你的文件:输出:
现在你也可以只想提取一个部分:
输出:
1u4esq0p2#
下面是使用pandas处理 * 两种格式 * 的建议:
输出:
wd2eg0qa3#
对于
csv
标准库模块,使用itertools.groupby()
来处理解析文件是相当容易的:如果你有Python 3.10或更高版本,你可以将
itertools.groupby()
和itertools.pairwise()
结合使用,这会使这变得更简单: