我有一个制表符分隔的文件,例如这个小示例:
小例子:
PB.5680.1 GS_Isoseq_HQ_transcript/9773
PB.5681.1 GS_Isoseq_HQ_transcript/9825,GS_Isoseq_HQ_transcript/9097,GS_Isoseq_HQ_transcript/9835,GS_Isoseq_HQ_transcript/9415,GS_Isoseq_HQ_transcript/9259,GS_Isoseq_HQ_transcript/9539
PB.5686.1 GS_Isoseq_HQ_transcript/9151,GS_Isoseq_HQ_transcript/9450
我正在尝试解析文件并制作一个新文件,如下所示的预期输出。实际上,每个笔录/编号都应位于单独的行中,但是如果它们来自输入文件中的同一行,则它们的第一列将类似:
预期输出:
PB.5680.1 transcript/9773
PB.5681.1 transcript/9825
PB.5681.1 transcript/9097
PB.5681.1 transcript/9835
PB.5681.1 transcript/9415
PB.5681.1 transcript/9259
PB.5681.1 transcript/9539
PB.5686.1 transcript/9151
PB.5686.1 transcript/9450
为此,我在python3
中编写了以下代码。
import pandas as pd
df = pd.read_csv('myfile.txt', sep='\t,_', engine='python')
column = []
for line in df:
dat = column.append(line)
dat.to_csv("outfile.txt", sep = "\t")
但是它不返回我想要得到的。你知道如何解决吗?
为了方便起见,我们将为PB.5680.1的列提供名称ID,而另一列将被称为TRANSCRIPT。
我还将假设TRANSCRIPT列中的值都是字符串。因此,我们需要首先使每一行成为列表,然后展开列表,最后将其导出。
#Making TRANSCRIPT values lists
df['TRANSCRIPT']= df['TRANSCRIPT'].apply(lambda x: x.split(','))
#Set index to ID and explode TRANSCRIPT
df2 = df.set_index('ID')['TRANSCRIPT'].explode()
#export to CSV
df2.to_csv('./allDone.csv', header = False)