2015-10-20 79 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的数据扯皮”了一些不错的经验教训