我正在尝试打印匹配模式的行并写出匹配的行。
匹配行的编号很好,但是,Python也没有在新文件中写入内容,也没有引发错误消息。
#!/usr/bin/env python
import re
outputLineNumbers = open('OutputLineNumbers', 'w')
outputLine = open('OutputLine', 'w')
inputFile = open('z.vcf','r')
matchLines = inputFile.readlines()
total = 0
for i in range(len(matchLines)):
line = matchLines[i]
#print out the matched line number
if re.match('(\w+)\|(\d+)\|(\w+)\|AGTA(\d+)\.(\d)\|\s(0+\d+)\s\.\s(\w)\s(\w),(\w)', line):
total += 1
outputLineNumbers.write( str(i+1) + "\n" )
#WRITE out the matched line
if line == ('(\w+)\|(\d+)\|(\w+)\|AGTA(\d+)\.(\d)\|\s(0+\d+)\s\.\s(\w)\s(\w),(\w)'):
outputLine.write( line + "\n" )
print "total polyploid marker is : ", total
outputLineNumbers.close()
inputFile.close()
outputLine.close()
答案 0 :(得分:2)
您试图测试该行是否等于模式:
if line == ('(\w+)\|(\d+)\|(\w+)\|AGTA(\d+)\.(\d)\|\s(0+\d+)\s\.\s(\w)\s(\w),(\w)'):
但是,当字符串看起来包含模式时,字符串相等性不会神奇地调用正则表达式引擎。
删除if line ==
测试,然后将匹配的行写出作为前一个if
块的一部分:
if re.match('(\w+)\|(\d+)\|(\w+)\|AGTA(\d+)\.(\d)\|\s(0+\d+)\s\.\s(\w)\s(\w),(\w)', line):
total += 1
outputLineNumbers.write( str(i+1) + "\n" )
#WRITE out the matched line
outputLine.write( line + "\n" )
请注意,您可以直接遍历matchLines
;请使用enumerate()
function来生成运行索引:
for i, line in enumerate(matchLines, 1):
if re.match('(\w+)\|(\d+)\|(\w+)\|AGTA(\d+)\.(\d)\|\s(0+\d+)\s\.\s(\w)\s(\w),(\w)', line):
total += 1
outputLineNumbers.write("{}\n".format(i))
其中i
从1开始,因此之后无需再添加1。