繁体   English   中英

从txt文件中删除列

[英]Removing columns from a txt file

我是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 )

但是,令人惊讶的是,它不起作用。 而且我没有将第一个字符串分成两列。 有人对如何进行有任何想法吗?

非常感谢!

您可以尝试以下方法:

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 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'

可能的解决方案:

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

因此,由于上面提供的代码(感谢@ 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 234233232219233123221234233232232219233 23 0 0 0 0 0 0 198','1 1792869 Bcin01g04980 CTC / CC / TC / TC / TC / TC / T 240236233220232220240 96 66 80 30 25 0 140 166140202 194','2 19718 Bcin02g00005 CAC / AC / AC / AC / AC / AC / AC / AC 86 51 78 84 87 108 63 38 58 60 63 86 22 13 20 24 24 22','....','....','...']

文本文件中的输出看起来还可以,只是列表的每个元素的末尾没有换行:

1 1792868 Bcin01g04980 CTC / CC / CC / CC / CC / CC / T 234233232219219233221221234233232219233 23 0 0 0 0 0 0 198 1 1792869 Bcin01g04980 ...

谢谢你的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM