我之前曾问过这个问题,试图开始使用这段代码: 命令行参数需要采用2 OR 3参数
-s:这是一个可选参数或开关,表示用户wwants拼接的基因序列(内含子被删除)。用户不必提供这个(意味着他想要整个基因序列),但是他确实提供了它然后它必须是第一个参数
输入文件(带基因)
输出文件(程序将创建存储fasta文件的位置
该文件包含如下行:
NM_001003443 chr11 + 5925152 592608098 2 5925152,5925652,5925404,5926898,
然后我需要制作多个条件以确保输入的所有内容都正确,否则程序将退出:
输入文件违反以下任何内容:
我已为此编写代码,但其中存在错误。然而,我最近无法找到错误。有人可以帮助我查看我的代码并查看某处是否存在错误?我真的很感激!!
所有if语句都在我的实际代码中被标记,但我在这里导入它时遇到了麻烦......
import sys
p = '(NM_\d+)\s+(chr\d+)([(\+)|(-)])\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+,\d+,)s+(\d+,\d+,)'
e = '([(\+)|(-)])'
def getGenes(spliced, infile, outfile):
spliced = False
if '-s' in sys.argv:
spliced = True
sys.argv.remove('s')
infile, outfile = sys.argv[1:]
if '.genes' not in infile:
print('Incorrect input file type')
sys.exit(1)
if '.fa' or '.fasta' not in outfile:
print('Incorrect output file type')
sys.exit(1)
if len(sys.argv[0]) < 2 or len(sys.argv[0]) > 3:
print('Command line parameters missing')
sys.exit(1)
if sys.argv[1] != '-s':
print('Invalid parameter, if spliced, must be -s')
sys.exit(1)
fp = open(infile, 'r')
wp = open(outfile, 'r')
FirstLine = fp.readline().strip()
if not FirstLine.startswith('#'):
print ('First line does not start with #')
sys.exit(1)
n = 1
for line in fp.readlines():
n += 1
cols = line.strip().split('')
if len(cols) != 10:
print('Lenth not equal to 10')
sys.exit(1)
if cols[2] != '+' or '-':
print('Column 2 is not a + or - symbol')
sys.exit(1)
if cols[8] != '\t\d+':
print('Column 8 is not a tab-separated list of integers')
sys.exit(1)
if cols[9] != '\t\d+' and len(cols[9]) != len(cols[8]):
print('Column 9 in not a tab-separated list of integers with the exact same number of integers in column 8')
sys.exit(1)
答案 0 :(得分:-1)
删除此块:
if sys.argv[1] != '-s':
print('Invalid parameter, if spliced, must be -s')
sys.exit(1)
sys.argv[1]
将始终不等于'-s'
,因为如果argv中存在'-s'
,您之前会将其删除一些:
if '-s' in sys.argv:
spliced = True
sys.argv.remove('s')
和这一行
if len(sys.argv[0]) < 2 or len(sys.argv[0]) > 3:
不检查有用的东西,并且会经常触发。它检查调用脚本的名称长度是否正好是2或3个字符。那没有意义。 看起来你想要检查两个文件名,加上可能的-s标志是否已通过,仅此而已。
在这种情况下,你的意思是:
if not 3 <= len(sys.argv) <= 4: # len(sys.argv) - 1 is the number of parameters for the script, as sys.argv[0] is the scriptname itself
如果您需要更多帮助,您必须更准确地了解观察到的不当行为。
编辑:
if cols[8] != '\t\d+':
不会按照你喜欢的方式运作。它将cols [8]中的值与 literal '\ t \ d +'字符串进行比较。您可能想了解re
模块。在下一个if行中出现同样的问题。