Обработка JSON в Fasta, преобразование кода Python в Groovy - PullRequest
0 голосов
/ 07 октября 2019

У меня есть файл конфигурации, который выглядит следующим образом:

{
    "codes": {
        "0004F--0004R": {
            "Forward code Name": "0004F",
            "Forward code Info": "xxxyyy4",
            "Rev code Name": "0004R",
            "Rev code Info": "xxxyyy3"
        },
        "0014F--0014R": {
            "Forward code Name": "0014F",
            "Forward code Info": "xxxyyy1",
            "Rev Barcode Name": "0014R",
            "Rev Barcode Info": "xxxyyy2"

        }
    }
}

Мне нужно обработать этот json, чтобы я получил выходной файл "fasta", который выглядит следующим образом:

>0004F
xxxyyy4
>0004R
xxxyyy3
>0014F
xxxyyy1
>0014R
xxxyyy2

Я по сути программист на python, поэтому в python мой код выглядит так:

with open('codes.fasta', 'w') as f:
    for k, v in json_object.get('codes', {}).items():
        fname, revname = k.split('--')
        print(f'>{fname}\n{v["Forward code Info"]}', file=f)
        print(f'>{revname}\n{v["Rev code Info"]}', file=f) 

Мне нужно написать аналогичную функцию в Groovy.

В псевдокоде: 1. Датьconfig.json 2. Groovy читает JSON 3. Анализирует JSON соответственно 4. Выводит файл "fasta"

Есть ли здесь Groovy-кодеры?

1 Ответ

2 голосов
/ 07 октября 2019
import groovy.json.*

def jsonObject = new JsonSlurper().parseText '''{
    "codes": {
        "0004F--0004R": {
            "Forward code Name": "0004F",
            "Forward code Info": "xxxyyy4",
            "Rev code Name": "0004R",
            "Rev code Info": "xxxyyy3"
        },
        "0014F--0014R": {
            "Forward code Name": "0014F",
            "Forward code Info": "xxxyyy1",
            "Rev Barcode Name": "0014R",
            "Rev Barcode Info": "xxxyyy2"

        }
    }
}'''

new File('codes.fasta').withOutputStream { out ->
    jsonObject.codes.each { code -> 
        def (fname, revname) = code.key.split('--')
        out << ">$fname\n${code.value['Forward code Info']}\n"
        out << ">$revname\n${code.value['Rev Barcode Info']}\n"
    }
}

Вы можете написать Groovy очень аналогичным образом.

Вместо синтаксического анализа с использованием parseText вам, скорее всего, потребуется вызвать parse(new File(config.json) или какой-либо другой аналогичный метод API .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...