我有一个计算"或者"的函数。我的数据列表类型。
java.time
目标是编写带有坐标的输出文本文件。
keyword = sys.argv[1] # a name from the Name column
def exon_coords():
exon_start_plus = [] # Plus strand coordinates
exon_start_minus = [] # Minus strand coordinates
for line in csv.reader(sys.stdin, csv.excel_tab):
if len(line) >= 1:
if re.search(keyword, str(line)): # If arg keyword exists in file
if line[3] == "-": # If the DNA strand is a minus strand
chrompos = line[0] + ";" # Get the chromosome position
exon_start_minus.append(chrompos+line[1]) # Full exon position
else: # all other lines are plus strands
chrompos = line[0] + ";"
exon_start_plus.append(chrompos+line[1])
return exon_start_minus, exon_start_plus #Return lists
或者,如果关键字导致了MINUS链:
with open(keyword+"_plus.txt", "w") as thefile:
for item in exon_start_plus:
thefile.write("{}, ".format(item))
我尝试将这些写入文件放在代码中,但是返回函数不会给我完整的列表,而我最终每次只写一个坐标。我把它们放在最后,但是这导致空文件和空字符串 - 我想将它作为一个函数保留,并让它确定关键字(即基因ID)是否具有给予正/负链的坐标(我有一个包含这些数据的巨大数据文件,重点是不要手动扫描ID并查看它们是加/减DNA链。)
谢谢!
编辑(示例数据,必须删除一些列,所以我也编辑了代码):
with open(keyword+"_minus.txt", "w") as thefile:
for item in exon_start_minus:
thefile.write("{}, ".format(item))
因此,如果我使用ENSPFOG0000001作为我的关键字,那么脚本应该运行并确定链是加号,收集列表中的起始坐标,然后输出一个只有坐标的文件。该文件将包含关键字+" _plus.txt"追加。如果它是ENSPFOG0000002,那么它将收集负链坐标,并创建一个文件,其中关键字+" _minus.txt"被建造。
答案 0 :(得分:0)
空列表的计算结果为False:
>>> exon_start_minus, exon_start_plus = [], []
>>> bool(exon_start_minus), bool(exon_start_plus)
(False, False)
>>> exon_start_minus, exon_start_plus = [1], []
>>> bool(exon_start_minus), bool(exon_start_plus)
(True, False)
>>> exon_start_minus, exon_start_plus = [1], [1]
>>> bool(exon_start_minus), bool(exon_start_plus)
(True, True)
>>> exon_start_minus, exon_start_plus = [], [1]
>>> bool(exon_start_minus), bool(exon_start_plus)
(False, True)
因此,您可以测试空列表并根据需要采取措施
>>> if exon_start_plus:
print('!!!')
!!!
>>> if exon_start_minus:
print('!!!')
>>>
从函数中检索两个列表:
exon_start_minus, exon_start_plus = exon_coords()