我是一個試圖製作腳本的Python初學者,它使用製表符分隔的文本文件作爲輸入將指定的行轉換爲列。這裏是文件中的行的一個示例:個體(列0)的Python:將行轉換爲文件中的列
1 chr1 1008376 1258657 250281 4628 666 2832 565 16.6323226376 83.3676773624
1 chr1 1258657 1516806 258149 2544 601 1481 231 13.4929906542 86.5070093458
1 chr1 1516806 1766886 250080 1652 590 936 63 6.30630630631 93.6936936937
1 chr1 1766886 2017159 250273 5030 1608 2698 362 11.8300653595 88.1699346405
本質文件經過在染色體區域(柱2-3)的列表(第1列),並給出了統計爲該地區計算(第9欄)。該文件首先列出了個人1,然後2,直到最後的個人的所有地區。文件中有20個人。 像一個不包含0或4-8列的新文件,並且具有新列,這些列是該行中該地區(現在爲1-2列)的分數。因此,對於個人1列3現在將是先前列9列4將是該地區在個人2中的得分,依此類推。因此,每行的第2列(chr1)作爲第0列,而區域得分(第1-2列)之後的20列是20個人中每一個的得分。 目前得分是在行中,所以文件有很多行。 1-3列中的每個個體值都是相同的,所以不存在不重疊的區域問題。也是所有人都有相同數量的行。換句話說,列2 + 3在文件中被重複20次。
如果這太複雜/密集下面的解釋是一個簡明的例子來說明問題。
這裏是我想什麼是簡單的虛擬例如:
原始文件:
1 chr1 10 20 30423
1 chr1 20 30 40556
2 chr1 10 20 73476
2 chr1 20 30 43657
3 chr1 10 20 34656.5
3 chr1 20 30 90848
改爲:
chr1 10 20 30423 73476 34656.5
chr1 20 30 40556 43657 90848
因此,如果任何Python用戶對轉換的一些技巧行到列,即使你沒有時間去專門解決這個問題,也會非常有幫助我發現行到列轉換是一個特別棘手的問題,尤其是當它的條件是列的值(這裏是列0)時。
請讓我知道,如果我能澄清問題。任何幫助或意見表示讚賞。
所以更新:感謝您的所有意見,這裏是我想出迄今:
ListofData = [] # make list
individual=1 # only interested in first individual to get list of windows for the chromosome
for line in file('/mnt/genotyping/Alex/wholegenome/LROH/LROHSplitbyChrom/Filtered_by_MappingQuality20/SimpleHomozygosityScore/HomozygosityStatisticsTameratsalllanesMinMQ20chr20'):
line = line.rstrip()
fields = line.split("\t")
if "chr" in line: #avoids header
if int(fields[0]) == individual:
ListofData.extend(fields[2:5]) # add start, end and size of window to list
else: # once iterated through windows, split the list into sets of three, making it one list per line
lol = [ListofData[i:i+3] for i in range(0, len(ListofData), 3)] #list of lists divided into 3's
smallcounter = 0
for i in lol: #for set of 3 in list
for line in file('/mnt/genotyping/Alex/wholegenome/LROH/LROHSplitbyChrom/Filtered_by_MappingQuality20/SimpleHomozygosityScore/HomozygosityStatisticsTameratsalllanesMinMQ20chr20'):
if "chr" in line: # avoids header
line = line.rstrip()
fields = line.split("\t")
if str(fields[2]) == lol.pop(0): #if start position in line matches start position in i
i.extend(fields[9]) #add homozygosity score to list
counter = counter + 1
if smallcounter == 20: #if gone through all individuals in file
smallcounter = 0 #reset counter for next try
print i
我通過文件想拿我在2-4列想要的信息,並把它放在一個列表。然後,我將這個列表分成與每行對應的3個組。 然後在第二個循環中,我試圖說明列表中的每個3(對於列表中的每個列表都是這樣)遍歷文件,並且如果列表中的第一個位置與文件中的開始位置相同(字段[2]),然後將字段[9]中的分數添加到該列表中。 然後,我需要做的就是一個接一個地打印列表以獲得我所追求的內容。 但是我有對線路難度:
if str(fields[2]) == lol.pop(0):
我想Python來看看列表中的第一位置,這是最初領域[2],並詢問是否是一樣的領域[2]在循環中的位置。如果是的話,它應該將字段[9]附加到列表中。
讓我知道是否需要更好地解釋。
非常感謝您提前,您的幫助真的很感謝!
作爲一個建議,你可能要編輯這篇文章,顯示在Python的命令行一些工作。在計算器中,展示你所做的一些工作總是有幫助的。 – octopusgrabbus
謝謝我嘗試做這件事,當我有一些腳本一直在努力,但不幸的是,在這裏我不知道從哪裏開始。我之前一直在bash中使用'join'進行類似的任務,但是這是合併來自單獨文件的數據。在這裏閱讀一個文件,我不知道從哪裏開始。但是當我工作時,我會發布我能想到的東西。謝謝 – user964689
第10列怎麼樣? –