我有一个制表符分隔的csv文件包含3个逗号分隔的字段:数字,序列和状态。每一行代表一个不同的序列。你知道吗
输入文件的一个例子序列.txt地址:
1 tgctccatatcagtgcagatcgcgcgatacattcctcagtaggaaaaaagttcagagatgataatcgtccgtccgggatttcagatgaaagaggctggaagtcaaggctttagcgggtaggaggttaatgatttt no
2 tatactatttagttctgcagtgagccttcatacaaagggatgtggagttgtcatatggggggctctgtatccggagttcggttttgcttgagactcaaatcggggttttcgtacat no
3 ccggctagtgagaggcttaagacatccagatatctcgaatagtaatagcagtcgaaaccgaaattaaaccccaatcactaatggcattcacataatgaatagtgcttactcgacctaagggcgaatt no
4 ttaattgatttttgtgcaaaaattgatattagagtattacccccgtattgctatgcgcctttctaattgactgattacgtgagacgcgcgggtttggagttcactgggcagacgcgagctacatttgccaggtacgact yes
我想写一个程序来扫描每个序列,并检查6个或更多的单体核苷酸重复(mnr)(大写或小写并不重要,我正在寻找两者)。如果我找到一个符合该条件的序列,那么我应该将整行打印到一个新的输出文件中(包含所有3个字段)。你知道吗
定义:单体核苷酸是:A、T、C、G的重复序列(不区分大小写)
mnr在一行中的重复将是这样的:aaaaaagtc或gtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc。。。你知道吗
我尝试了正则表达式,但不起作用:
import csv
import re
with open('sequences.txt','r') as f:
reader = csv.reader(f,delimiter=",")
for line in reader:
seq=re.findall(r'[Aa]{6, }',reader)
if line.__contains__(seq):
print(line)
with open('seqoutput.txt','w') as f:
for line in list1:
f.write(line)
预期产量:
1 tgctccatatcagtgcagatcgcgcgatacattcctcagtaggaaaaaagttcagagatgataatcgtccgtccgggatttcagatgaaagaggctggaagtcaaggctttagcgggtaggaggttaatgatttt no
2 tatactatttagttctgcagtgagccttcatacaaagggatgtggagttgtcatatggggggctctgtatccggagttcggttttgcttgagactcaaatcggggttttcgtacat no
电流输出:
Traceback (most recent call last):
File "sequence.py", line 6, in <module>
seq=re.findall(r'[Aa]{6, }',reader)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 181, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
您的
csv.reader
每次迭代都会产生一个列表,但是每行需要一个字符串。尝试使用简单文件打开或您的正则表达式可以扩展为其他字母:
要找到至少有6个重复字符的序列,可以使用捕获组和反向引用。你知道吗
将匹配:
[atcg]*
匹配字符类中列出的任何字符0+次([atcg])\1{5}
在组1中捕获与列出的任何一个匹配的内容,并重复对组1的反向引用5次[atcg]*
匹配字符类中列出的任何字符0+次Regex demo
您可以使用csv读取器并选择逗号作为分隔符(当您声明这是分隔符时,请注意示例数据中没有逗号)
如果是制表符,可以使用
'\t'
作为分隔符如果
sequence
部分匹配,则使用相同的分隔符将行写入新文件。你知道吗您的代码可能如下所示:
相关问题 更多 >
编程相关推荐