我想从我的文件中删除一行,如果它包含A,C,G或T以外的字母。那么['TC','CY','GS','GA','CT ''将成为['TC','GA','CT']。
文件将包含未知数量的行,并且将包含任意顺序的2个或更多字母的模式。另外,我不知道存在的其他字母(Y或S或其他)。
我最好如何在Python中为此设置程序?我已经可以导入我的文件并读取行。
谢谢!
答案 0 :(得分:3)
这个怎么样,作为一个班轮:
valid = [l.strip() for l in fh if all(c in 'ACGT' for c in l.strip())]
其中fh是你的文件句柄。
答案 1 :(得分:3)
您可以使用简单的正则表达式和列表理解来解决它。
>>> import re
>>> data = ['TC', 'CY', 'GS', 'GA', 'CT']
>>> [x for x in data if re.match(r'^[ACGT]+$', x)]
['TC', 'GA', 'CT']
答案 2 :(得分:0)
由于类型转换(你可以通过在之前分配set(“ACGT”)来减少它,但是一个很小的一行:
>>> l
['TC', 'CY', 'GS', 'GA', 'CT']
>>> [i for i in l if not set(i) - set("ACGT")]
['TC', 'GA', 'CT']