Вот решение с использованием панд:
Ввод:
df1 = pd.read_csv('file1.txt', sep='\t')
df2 = pd.read_csv('file2.txt', sep='\t')
merged_df = df1.merge(df2, left_on='#query_name' , right_on='Geneid' , how='inner').drop(['#query_name'],axis=1)
merged_df.to_csv('output.csv', index=False)
Вывод merged_df:
KEGG_KOs Geneid Chr Count
0 K00240 PROKKA_00019 k141_1000050 102
1 K00246 PROKKA_00020 k141_1000050 132
Строки 2 и 3 просто читают в текстовом форматефайлы (я предполагаю, что они разделены табуляцией) и сохраняют их в виде панелей данных панд (df1 и df2).В строке 4 я объединяю df1 и df2, используя столбцы #query_name и Geneid, а затем удаляю столбец #query_name.Я сохраняю вывод в виде CSV, и индекс (0, 1) удаляется.Если вы хотите сохранить объединенный фрейм данных как файл с разделителями табуляции, вам нужно всего лишь изменить последнюю строку на: merged_df.to_csv('output.txt', sep='\t', index=False)
Если вы получаете ключевую ошибку, это должно означать форматирование ваших файловможет быть немного шатким (есть смесь пробелов и табуляции).Этот код должен работать:
Ввод:
import pandas as pd
def to_df(file):
with open(file) as f:
df = [line.strip().split() for line in f]
return pd.DataFrame(df[1:], columns=df[0])
df1 = to_df('file1.txt')
df2 = to_df('file2.txt')
merged_df = df1.merge(df2, left_on='#query_name' , right_on='Geneid' , how='inner').drop(['#query_name'],axis=1)
merged_df.to_csv('output.csv', index=False)
Ввод:
KEGG_KOs Geneid Chr Count
0 K00240 PROKKA_00019 k141_1000050 102
1 K00246 PROKKA_00020 k141_1000050 132