2014-10-12 131 views
-5

我有一个大的文本文件,谁的线路在此格式组成:如何从文本文件行中提取唯一字符串?

Query: 1586  cccaagatgagctgcagccccccagagagagctctgcacgtcaccaagtaaccaggcccc 1645 
Sbjct: 27455708 cccaagatgagctgcagccccccagagagagctctgcacgtcaccaagtaaccaggcccc 27455649 

Query: 1646  agcctccaggcccccaactccgcccagcctctccccgctctggatcctgcactctaacac 1705  
Sbjct: 27455648 agcctccaggcccccaactccgcccagcctctccccgctctggatcctgcactctaacac 27455589 

Query: 1706  tcgactctgctgctcatgggaagaacagaattgctcctgcatgcaactaattcaataaaa 1765    
Sbjct: 27455588 tcgactctgctgctcatgggaagaacagaattgctcctgcatgcaactaattcaataaaa 27455529 

对于每一行,我希望能够只同时去除其他字符(查询,sbjct提取AGTC的不同序列不同数量),从而使最终的字符串应该是这样

line1 = cccaagatgagctgcagccccccagagagagctctgcacgtcaccaagtaaccaggcccc 
line2 = cccaagatgagctgcagccccccagagagagctctgcacgtcaccaagtaaccaggcccc 
etc... 

我一直工作在这一段时间,不能让它的工作。我试过重新模块和.translate,但没有结果。我在python 3.4编程。谢谢!

+0

有可能找到两个字符串之间的区别:http://stackoverflow.com/questions/17904097/python-difference-between-two-strings – 2014-10-12 04:24:07

+0

正则表达式将工作,但要与'split()'相比非常慢' – 2014-10-12 04:32:06

+0

你试过的代码在哪里?你的代码有什么问题? – jww 2014-10-12 05:20:13

回答

3

虽然你可以使用正则表达式(如您已尝试)的例子您提供可以使用agtc_part = line.split()[2]

此拆分给定的行成字符串,其中分隔符是一个空间的列表中很容易分裂。索引从0开始,所以用agct的部分由2

注意索引,调用split()没有明确地传递一个参数表示字符分割不仅分割的是空格字符,同时也将组序列空间一起而不是分开。这对您的情况非常重要,因为您的编号和agct字符串之间的空白字符数量不同。

例子:

>>> "aaa bbb".split() 
['aaa', 'bbb'] 
>>> "aaa bbb".split(' ') 
['aaa', '', '', 'bbb'] 
+1

只是一个小点,默认的分隔符是一个空格,所以你可以简单地'line.split()[2]' – 2014-10-12 04:30:21

+0

是的,我意识到这一点,但认为它可能更好,使其明确:) – 2014-10-12 05:02:26

+0

@ three_pineapples:您的解决方案为以“Query”开头的行提供了错误的结果。随着显式空间的使用(''''),你遇到了一个陷阱。从文档:“[如果sep给出,连续分隔符不分组在一起](https://docs.python.org/3/library/stdtypes.html#str.split)”。 – Matthias 2014-10-12 05:50:50