从txt文件中删除列

时间:2017-07-03 15:32:50

标签: python

我是Python的初学者,我有点陷入一个微不足道的问题。我想从文本文件中删除一些列和字符串。它是制表符分隔的。 第一个文件名为A.txt

chr1_1792868_SNP    Bcin01g04980    NON_SYNONYMOUS  NON_SYNONYMOUS[T](gene:Bcin01g04980|transcript:Bcin01g04980.1|P->S:225) C   T   C/C C/C C/C C/C C/C C/T 234 233 232 219 233 221 234 233 232 219 233 23  0   0   0   0   0   198

输出文件(我们称之为B.txt)应该是:

1   1792868 Bcin01g04980    C   T   C/C C/C C/C C/C C/C C/T 234 233 232 219 233 221 234 233 232 219 233 23  0   0   0   0   0   198

所以它将执行不同的操作:

  • 删除第一列的“chr”和“_”字符串
  • 在“chr”之后拆分1,在2个不同的列之后拆分数字
  • 删除所有第3列和第4列

到目前为止,我试过这样做:

with  open ('A.txt', 'r') as mutmut_mutants:
        dble_mut = csv.reader(mutmut_mutants, delimiter='\t')
        with open('B.txt', 'w+') as mutants_coo:
            mut_coo= csv.writer(mutants_coo)
            for i in dble_mut:
                del i[2]
                del i[3]
                mut_coov.writerow( i )

但是,令人惊讶的是,它不起作用。而且我没有将第一个字符串分成2列。任何人都知道如何进行?

非常感谢!

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

body {
    background:
        linear-gradient(-120deg, transparent 63%, #fff 63%), 
        linear-gradient(120deg, transparent 63%, #fff 63%), 
        linear-gradient(to bottom, blue, blue);
    background-size: 90px 50px;
    background-repeat: repeat-x;
}

输出:

f = open('data.txt').readlines()

f = [i.strip('\n').split() for i in f]

new_data = []

for i in f:
    data1 = i[0].split("_")
    new = data1[0][-1]+" "+data1[1]+" "

    new += i[1]+" "

    new += ' '.join(i[4:])

    new_data.append(new)
print new_data[0]

答案 1 :(得分:0)

可能的解决方案:

with open('A.txt', 'r') as f:
    data=f.read()

columns = data.split('\t')
result = []

temp = columns[0].split('_')
result.append(temp[0][-1])
result.append(temp[1])

result.extend(columns[4:])

print result

答案 2 :(得分:0)

感谢上面提供的代码(感谢@ Ajax1234和@doctorlove),我设法在列表中拥有了我想要的东西。我在将其正确保存到文件中时遇到了一些麻烦。我希望它以制表符分隔,并将列表的每个元素作为新行。 代码是

f = open('mutmut_mutants.txt').readlines()

f = [i.strip('\n').split() for i in f]

new_data = []

for i in f:
    data1 = i[0].split("_")
    new = data1[0][-1]+" "+data1[1]+" "

    new += i[1]+" "

    new += ' '.join(i[4:])

    new_data.append(new)
print new_data

outfile = open("test.txt", "w")
print >> outfile, "\t".join(str(i) for i in new_data)
outfile.close()

我的new_data列表如下所示:

  

['1 1792868 Bcin01g04980 CTC / CC / CC / CC / CC / CC / T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198','1 1792869 Bcin01g04980 CTC / CC / TC / TC / TC / TC / T 240 236 233 220 232 220 240 96 66 80 30 25 0 140 166 140 202 194','2 19718 Bcin02g00005 CAC / AC / AC / AC / AC / AC / A 86 51 78 84 87 108 63 38 58 60 63 86 22 13 20 24 24 22','....','....','...']

文本文件中的输出看起来没问题,除了列表中每个元素末尾没有新行:

  

1 1792868 Bcin01g04980 C T C / C C / C C / C C / C C / C C / T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198 1 1792869 Bcin01g04980 ...

感谢您的帮助!