如何将字典存储为单独的文件,并在python脚本中读取该文件以使用变量

2024-09-25 02:36:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想一些帮助使用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

有没有一个简单的方法来制作这个脚本?你知道吗

任何帮助都将不胜感激。你知道吗


Tags: 文件txtdatalineopenlengthhamgene
3条回答

最简单的方法是将编写的字典放在它自己的.py文件中,然后像导入其他模块一样导入它。你知道吗

from <filename without .py> import gene_data

然后就可以像在导入模块中输入一样使用它。你知道吗

如果不控制数据文件,这样做是非常不安全的。你知道吗

execfileimport将允许您在文件中以文本形式运行它。但要注意安全问题。import为您提供了对执行过程的更多控制,但牺牲了更复杂的语法。你知道吗

您可以替换此行: gene_data = open("gene_data1.txt", "r")

有了这个:

import ast

with open('dict.txt') as f:
    gene_data = f.read()
gene_data = ast.literal_eval(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,}

正如其他人所指出的,允许脚本执行文件中的任何命令都是危险的。使用此方法,至少不会执行外部文件中的任何内容,如果内容的计算结果不好,脚本只会抛出一个错误。你知道吗

相关问题 更多 >