我有一个目录,其中包含具有以下模式的文件:..json。一些 ID 重复,日期不同。我想过滤每个 ID 具有最近日期的文件。
如何在 snakemake 中实现这个过滤步骤?
我已经有一个返回过滤文件列表的 python 函数。这是 snakemake 文件的一个最小示例:
import os
import re
dir_path = "path/to/dir/"
out_dir = "path/to/result_dir"
def get_most_recent_files(wildcards):
dir = dir_path
file_pattern = re.compile(r"([A-Za-z0-9]+)\.(\d{4}-\d{2}-\d{2}).json$")
id_files = {}
for filename in os.listdir(dir):
match = file_pattern.match(filename)
if match:
id, date = match.groups()
id_files.setdefault(id, []).append((filename, date))
most_recent_files = {}
for id, files in id_files.items():
files.sort(key=lambda x: x[1], reverse=True)
most_recent_files[id] = files[0][0]
return [dir + file for file in most_recent_files.values()]
rule all:
input:
out_dir + "{ID}_parsed.csv"
rule parse_jsons:
input:
get_most_recent_files
output:
out_dir + "{ID}_parsed.csv"
script:
"parser.py"
但是像这样我得到错误:
Wildcards in input files cannot be determined from output files: 'ID'
所以我不确定我应该在哪里提供通配符“PID”。
我尝试了使用 glob_wildcards 和扩展的不同方法,但没有任何效果。