gpt4 book ai didi

python - 如何将此 for 循环生成的列表列表写入文件(Python)?

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:34 25 4
gpt4 key购买 nike

我在将我的一个热编码器的输出列表写入文件时遇到了一些问题。下面是显示这些列表是如何生成的代码。输入文件包含几个看起来像这样的 DNA 序列,例如:

>seq1
AGTAGATAG
>seq2
GGTTAACCG

这是 Python 代码:

import sys

path = sys.argv[1]
file = open(path, 'r')

holder = file.read()
holder1 = str(holder)
holder2 = holder1.replace("\n","")
uppercase = holder2.upper()

import re
test = re.sub('1|2|3|4|5|6|7|8|9|0|\t|SEQ|CHR|-|:', "", uppercase)
newone = test.split(">")
newone = [x for x in newone if x]

#checking for presence of N in sequence
lettern = "N"
result = [component for component in lettern if(component in newone)]

#if N is present in sequence, an error message is displayed

for line in newone:

if (bool(result)) == True:
print("The input sequence is invalid, N is present.")
sys.exit()

#if sequence is in the correct format, proceed with one hot encoding

else:
#mapping of bases to integers as a dictionary
bases = "ATCG"
base_to_integer = dict((i, c) for c, i in enumerate(bases))

#encoding input sequence as integers

integer_encoded = [base_to_integer[y] for y in line]

#one hot encoding
onehot_encoded = list()
for value in integer_encoded:
base = [0 for x in range(len(bases))]
base[value] = 1
onehot_encoded.append(base)
print(onehot_encoded)

我已经尝试以多种不同的方式修改末尾的 for 循环,但我仍然无法将整个输出写入一个文件,它通常最终只显示最后一个编码序列。这是我最接近的解决方案:

        onehot_encoded = list()
temporal = list()
for value in integer_encoded:
base = [0 for x in range(len(bases))]
base[value] = 1
onehot_encoded.append(base)
temporal.extend(onehot_encoded)

with open("output", "a") as file:
file.write(str(temporal))
file.close()

然而,这最终会重复循环,并且在我运行它并查看输出文件后,在 Linux 中还显示了我的用户名和服务器名称看起来非常奇怪的困惑。

如能帮助我将整个输出整合到一个文件中,我将不胜感激。

最佳答案

似乎您的问题是,您正在重置输出循环内的结构,因此当您尝试仅打印到文件时最后的编码可用。

我说似乎是因为您的代码相当复杂,尤其是你不断地重新计算可以放在循环之外的东西。

修改程序①将停止条件放在循环之外,②在开始循环之前打开输出文件,③使用字典来预先计算不同碱基的编码 ④ 简化循环因为我们可以进行字典查找而不是重新计算每次编码,⑤使用关键字打印到输出文件参数 file=...

stop_letters = "N"
for stop_letter in stop_letters:
if stop_letter in newone : sys.exit()

out = open(..., 'w')
d = {"A":[1,0,0,0], "T":[0,1,0,0], "C":[0,0,1,0], "G":[0,0,0,1,]}

for bases in newone:
onehot_encoded = [d[base] for base in bases]
print(onehot_encoded, file=out)

out.close()

关于python - 如何将此 for 循环生成的列表列表写入文件(Python)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57474560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com