Создание словаря:
У меня есть набор из 50 текстовых файлов, все из которых настроены на первую строку заголовка, первый столбец - имена генов, а остальные столбцы - значения для каждого гена. У меня также есть официальный текстовый файл со списком генов. Я хочу использовать официальный список имен генов для создания словаря, затем перебрать файлы, определить, совпадает ли имя гена для каждой строки с именем гена в словаре, и, если это так, добавить значение словаря с дополнительными значениями изэкспериментальный файл.
Итак, экспериментальный файл выглядит следующим образом:
Gene_ORF ExpA ExpB
geneA 12 34
geneB 42 10
geneC 42 10
Официальный список генов выглядит так:
Gene_ORF
geneA
geneC
Я использовал следующий код дляпереберите все файлы в каталоге и создайте словарь:
dict = {}
df_list_all = [ fn for fn in os.listdir(os.getcwd()) if fn.endswith("results.txt") ]
with open("gene_orf.txt", 'r') as f:
for line in f:
name = line.split('\n')[0]
dict[name]= []
for each in df_list_all:
with open(each, 'r') as g:
for each in g:
gene = each.split('\t')[0]
data = each.rstrip('\n').split('\t')[1:]
if gene in dict:
dict[gene].append(data)
Итак, словарь выглядит следующим образом:
{ 'Gene_ORF': [['ExpA', 'ExpB'], ['ExpC']], 'geneA': [['12, '34'], ['42']]...}
Я использовал следующий код для преобразования словаря во вложенныйlist:
nestedList = [ ]
for key, val in dict.items():
nestedList.append(f"{key} \t {val} \n")
В результате получился вложенный список, составленный следующим образом:
"Gene_ORF \t [['ExpA', 'ExpB'], ['ExpC']] \n GeneA \t [['12', '34'], ['42']] \n"
Я пытаюсь сгладить вложенный список, но запускаю его для решения проблем, связанных сструны. Я пробовал несколько вещей, в том числе:
flatList = ' '.join([data for ele in nestedList for data in ele])
и
flatList = []
for elem in nestedList:
flatList.extend(elem)
Но каждый раз я получаю такой результат:
O R F _ G e n e \t. [ [ ' E x p A ' , ' E x p B ' ] , [ ' E x p C ' ] ] \n
I 'мне бы хотелось, чтобы flatList выглядел так:
Gene_ORF \t ExpA \t ExpB \t ExpC
GeneA \t 12 \t 34 \t 42
Потому что я хотел бы написать все это в финал, чтобы он выглядел так:
Gene_ORF ExpA ExpB ExpC
GeneA 12 34 42
Я бы очень признателенлюбая помощь или совет, который у вас есть.
РЕДАКТИРОВАТЬ: отредактировано, чтобы указать, как я вошел в первый список.