Я очень новичок в Python/JSON, поэтому, пожалуйста, несите меня на этом. Я мог бы сделать это в R, но нам нужно использовать Python, чтобы преобразовать его в Python/Spark/MongoDB. Кроме того, я просто размещаю минимальное подмножество - у меня есть еще несколько типов файлов, поэтому, если кто-нибудь может мне помочь, я могу использовать это для интеграции большего количества файлов и типов файлов:Python: объединить два CSV-файла в многоуровневые JSON
Возвращаясь к моей проблеме:
У меня есть два входных файла tsv, которые мне нужно объединить и конвертировать в JSON. Оба файла содержат столбцы с именами и образцами, а также некоторые дополнительные столбцы. Однако gene
и sample
могут или не совпадать, как я показал - f2.tsv имеет все гены в f1.tsv, но также имеет дополнительный ген g3
. Аналогично, оба файла имеют перекрывающиеся, а также неперекрывающиеся значения в столбце sample
.
# f1.tsv – has gene, sample and additional column other1
$ cat f1.tsv
gene sample other1
g1 s1 a1
g1 s2 b1
g1 s3a c1
g2 s4 d1
# f2.tsv – has gene, sample and additional columns other21, other22
$ cat f2.tsv
gene sample other21 other22
g1 s1 a21 a22
g1 s2 b21 b22
g1 s3b c21 c22
g2 s4 d21 d22
g3 s5 f21 f22
Ген образует верхний уровень, каждый ген имеет несколько образцов, которые образуют второй уровень и дополнительные столбцы образуют extras
, который является третьим уровнем. Дополнительные параметры разделены на два, потому что один файл имеет other1
, а второй файл имеет other21
и other22
. Другие файлы, которые я буду включать позже, будут иметь другие поля, такие как other31
и other32
и т. Д., Но они все равно будут содержать столбцы генов и образцов.
# expected output – JSON by combining both tsv files.
$ cat output.json
[{
"gene":"g1",
"samples":[
{
"sample":"s2",
"extras":[
{
"other1":"b1"
},
{
"other21":"b21",
"other22":"b22"
}
]
},
{
"sample":"s1",
"extras":[
{
"other1":"a1"
},
{
"other21":"a21",
"other22":"a22"
}
]
},
{
"sample":"s3b",
"extras":[
{
"other21":"c21",
"other22":"c22"
}
]
},
{
"sample":"s3a",
"extras":[
{
"other1":"c1"
}
]
}
]
},{
"gene":"g2",
"samples":[
{
"sample":"s4",
"extras":[
{
"other1":"d1"
},
{
"other21":"d21",
"other22":"d22"
}
]
}
]
},{
"gene":"g3",
"samples":[
{
"sample":"s5",
"extras":[
{
"other21":"f21",
"other22":"f22"
}
]
}
]
}]
Как преобразовать два csv-файла в одноразрядный JSON на основе двух общих столбцов?
Я бы очень признателен за любую помощь, которую я могу получить от этого.
Спасибо!
Это отлично работает - мне очень нравится, что у вас есть такое обобщение - где я могу указать разделитель, а также любое количество файлов. Это невероятно! –
я только есть одна проблема - для g1/s1 это показывает '' ' "дополнительные услуги": [ { "Разное1": "a1" }, [ { "other22": "A22", «other21 ":" a21 " } ] ]' '' Я хочу удалить внутренние квадратные скобки из дополнительных функций. –
@ KomalRathi oops, извините за это. Я отредактировал с исправлением – gregbert