python 更改 '|'进入脱色标签

python to change '|' into tab delimenated

我需要替换“|”进入选项卡,以便我可以分析我的人类注释基因组数据 (200+mb)。我是一名研究助理,正在学习如何 analyze/manipulate 以 easiest/simplest 的方式对数据进行排序,以便我可以在更多数据上复制它。

这是我的数据的样子。一个文件中大约有 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>

print w 只是打印您创建的全新 csv.writer 对象(您可能并不打算在每个循环中创建一个新的编写器)。如果你想写信给它,使用 the actual writerow method. There is a lot of example code on the csv docs page for reading and writing,你只需要将它们组合起来(并为每个使用不同的方言)。

您实际上并没有使用 csv.reader,即使您使用了,您的输入文件也是 .xlsx,它不是 CSV、竖线分隔符或其他任何东西,它比csv 无法读取的复杂数据格式(Office XML,并且它是一个 zip 文件,因此直接读取时看起来像二进制乱码)。

尝试使用正则表达式。 一行示例:

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)

您的文件名表示 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 在 "Data Wrangling with MongoDB"

中有一些不错的课程