如果行以字母表中的任何字母开头,则打印行

时间:2016-04-30 04:21:41

标签: python

我正在尝试在我的python程序中打印所有爬行类亚种。我有一个带有一堆亚种及其DNA序列ID的文本文件。我只想创建一个亚种(键)字典及其各自的DNA序列ID(值)。但要做到这一点,我需要先学习如何将两者分开。

所以我想只打印所有的亚种名称,并忽略序列ID。

到目前为止我已经

import re
file = open('repCleanSubs2.txt')
for line in file:
    if line.startswith('[a-zA-Z]'):
        print line

我相信编译器将'[a-zA-Z]'作为字符串文字,而不是搜索字母表中的任何字母,无论区分大小写,这都是我想要的。

我的if语句中是否缺少某些语法?

谢谢!

7 个答案:

答案 0 :(得分:1)

startswith不解释正则表达式。使用您导入的re模块来检查字符串是否匹配:

if re.match('^[a-zA-Z]+', line) is not None:
    print line

以:^

开头

一个或多个匹配的字符:+

http://www.fon.hum.uva.nl/praat/manual/Regular_expressions_1__Special_characters.html

答案 1 :(得分:1)

import re

file = open('repCleanSubs2.txt')
for line in file:
    match = re.findall('^[a-zA-Z]+', line)
    if match:
        print line, match

^符号表示从该行的开头匹配,a-zA-Z之间的字母

+表示必须找到[a-zA-Z]中的至少一个或多个字符

re.findall将返回您在提供给它的字符串中可以找到的所有模式的列表

答案 2 :(得分:0)

尝试以下行而不是startswith。

if re.match("^[a-zA-Z]", line):
       print line

答案 3 :(得分:0)

试试这个,它为我工作:

import re
file = open('repCleanSubs2.txt')
for line in file:
if (re.match('[a-zA-Z]',line)):
    print line

答案 4 :(得分:0)

不使用re

import string
with open('repCleanSubs2.txt') as c_file:
    for line in c_file:
        if any([line.startswith(c) for c in string.letters]):
            print line

答案 5 :(得分:0)

尝试一下

file = open("abc.xyz")
file_content = file.read()
line = file_content.splitlines()
output_data = []

for i in line:
     if i[0] == '[a-zA-Z]':
     output_data.append(i)
     print(i)

答案 6 :(得分:-1)

可以在没有正则表达的情况下完成

data = open('repCleanSubs2.txt').read().splitlines() ## Read file and extract data as list

print [i for i in data if i[0].isalpha()]