2015-10-20 66 views
1

我需要替換'|'到標籤中,以便我可以分析我的人類註釋基因組數據(200 + mb)。我是一位研究助理,學習如何以最簡單/最簡單的方式分析/操縱測序數據,以便我可以在更多數據上覆制這些數據。python改變'|'到標籤delimenated

這裏我的數據是怎樣的。在一個文件中有大約400,000行這種類型的數據。

 ANN=C|downstream_gene_variant|MODIFIER|OR4G4P|ENSG00000268020|transcript|ENST00000606857|unprocessed_pseudogene||n.*1414T>C|||||1414|,C|intron_variant|MODIFIER|OR4G4P|ENSG00000268020|transcript|ENST00000594647|unprocessed_pseudogene|1/1|n.20-104T>C||||||;DP=11;SS=1;VT=SNP 

我試圖用這段代碼來替換'|'轉換成'\ t'幾行。

import csv 
infile = 'Book2.xlsx' 
with open(infile , 'r') as inf: 
    for line in inf:  
     w =csv.writer(inf, delimiter = '\t') 
     print w 

所有我得到是這樣的:

<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
<_csv.writer object at 0x7f8beebaafc8> 
+0

的'csv'模塊不能讀寫Excel格式'.xlsx'文件,只有包含字符分隔值的文本文件。有許多Python的第三方模塊可以處理Excel文件,所以你需要使用一個(儘管理論上你可以編寫自己的模塊)。其次,即使'csv'確實支持這種格式,您的代碼也會爲它讀取的每一行輸入文件創建一個新的'csv.writer'_class instance_,這就是您顯示輸出的原因。 – martineau

回答

1

嘗試使用正則表達式。 舉例一行:

a = "ANN=C|downstream_gene_variant|MODIFIER|OR4G4P|ENSG00000268020|transcript|ENST00000606857|unprocessed_pseudogene||n.*1414T>C|||||1414|,C|intron_variant|MODIFIER|OR4G4P|ENSG00000268020|transcript|ENST00000594647|unprocessed_pseudogene|1/1|n.20-104T>C||||||;DP=11;SS=1;VT=SNP" 


import re 
regex= re.compile(r'\|') 
regex.sub("\t",a) 
+0

完美的作品! –

0

print w只是打印您創建的全新csv.writer對象(你可能並不意味着在每個循環中創建一個新的作家)。如果你想寫信給它,請使用the actual writerow method。有很多example code on the csv docs page for reading and writing,你只需要將它們合併(併爲每個方言使用另一種方言)。

您實際上並未使用csv.reader,即使您的輸入文件是.xlsx(不是CSV,管道分隔符或其他任何內容),它也是一種非常複雜的數據格式(Office XML,它是一個zip文件,所以它看起來像直接讀取時的二進制亂碼)csv無法讀取。

0

你的文件名顯示Excel中,但現在我會假設你實際上有一個TSV(製表分隔)文件,而不是Excel文件。如果是這樣

infile = 'Book2.tsv' 
of = 'Book2.csv' 
with open(infile , 'r') as inf: 
    for line in inf: 
     of.write(line.replace('|',',')) 
of.close() 

當然,如果它是Excel中的不同嘗試xlrd Udacity在「與MongoDB的數據扯皮」了一些不錯的經驗教訓