我想一些帮助使用python打开一个文件,并使用文件的内容作为一个变量。 我有一个这样的剧本。你知道吗
#!/usr/bin/env python
with open("seqnames-test1-iso-legal-temp.txt") as f:
gene_data = {'ham_pb_length':2973, 'ham_pb_bitscore':5664,'cg2225_ph_length':3303, 'cg2225_ph_bitscore':6435,'lrp1_pf_length':14259, 'lrp1_pf_bitscore':28010,}
for line in f:
if not line.isspace():
bitscore = gene_data[line.rstrip()+'_bitscore']
length = gene_data[line.rstrip()+'_length']
if (2*0.95*length <= bitscore/2 <= 2*1.05*length):
print line
其中文件“seqnames-test1-iso-legal-温度.txt“是一个基因名的列表,包括ham\u-pb、cg2225、lrp1\u-pf等。我只列出了字典的前6个值,但总共有600个键。文件“seqnames-test1-iso-legal”中的300个基因名的“name”length、“name”bitscore形式-温度.txt". 你知道吗
因此,我想将dictionary gene\u数据保存为一个单独的文本文件,并在执行脚本时读取该文件。有没有办法做到这一点。我试着制作一个包含字典的文本文件“gene\u data1.txt”。因此,文本文件的内容是:
gene_data = { 'ham_pb_length':2973, 'ham_pb_bitscore':5664,'cg2225_ph_length':3303, 'cg2225_ph_bitscore':6435,'lrp1_pf_length':14259, 'lrp1_pf_bitscore':28010,}
我试着用open函数打开文件,所以我的脚本是这样的:
#!/usr/bin/env python
gene_data = open("gene_data1.txt", "r")
with open("seqnames-test1-iso-legal-temp.txt") as f:
for line in f:
if not line.isspace():
bitscore = gene_data[line.rstrip()+'_bitscore']
length = gene_data[line.rstrip()+'_length']
if (2*0.95*length <= bitscore/2 <= 2*1.05*length):
print line
但这给了我一个错误信息:
Traceback (most recent call last):
File "fixduplicatebittest1.py", line 6, in <module>
bitscore = gene_data[line.rstrip()+'_bitscore']
NameError: name 'gene_data' is not defined
有没有一个简单的方法来制作这个脚本?你知道吗
任何帮助都将不胜感激。你知道吗
最简单的方法是将编写的字典放在它自己的.py文件中,然后像导入其他模块一样导入它。你知道吗
然后就可以像在导入模块中输入一样使用它。你知道吗
如果不控制数据文件,这样做是非常不安全的。你知道吗
execfile
或import
将允许您在文件中以文本形式运行它。但要注意安全问题。import
为您提供了对执行过程的更多控制,但牺牲了更复杂的语法。你知道吗您可以替换此行:
gene_data = open("gene_data1.txt", "r")
有了这个:
但要确保文本文件只包含字典,而不是字典的赋值:
正如其他人所指出的,允许脚本执行文件中的任何命令都是危险的。使用此方法,至少不会执行外部文件中的任何内容,如果内容的计算结果不好,脚本只会抛出一个错误。你知道吗
相关问题 更多 >
编程相关推荐