从文本文件中获取变量值的最佳方法是什么?
关于这个问题,我有一个类似但不完全相同的问题。
我有一个文本文件,里面的内容结构是这样的:
var_a: 'home'
var_b: 'car'
var_c: 15.5
我希望Python能读取这个文件,然后创建一个叫做var_a的变量,值为'home',依此类推。
举个例子:
#python stuff over here
getVarFromFile(filename) #this is the function that im looking for
print var_b
#output: car, as string
print var_c
#output 15.5, as number.
这样做可能吗?我想问的是,能不能保持变量的类型?
请注意,我可以自由设计文本文件的结构,如果我提议的格式不是最好的,我可以使用其他格式。
编辑:ConfigParser可能是一个解决方案,但我不太喜欢,因为在我的脚本中,我需要用
config.get("set", "var_name")
来引用文件中的变量。
但我更希望能直接引用变量,就像我在Python脚本中声明的一样……
有没有办法把这个文件导入为Python字典?
哦,最后一点,请记住,我不确定文本文件中会有多少个变量。
编辑2:我对stephan的JSON解决方案很感兴趣,因为这样文本文件可以用其他语言(比如PHP,然后通过AJAX的JavaScript)简单读取,但在尝试这个解决方案时我遇到了一些问题:
#for the example, i dont load the file but create a var with the supposed file content
file_content = "'var_a': 4, 'var_b': 'a string'"
mydict = dict(file_content)
#Error: ValueError: dictionary update sequence element #0 has length 1; 2 is required
file_content_2 = "{'var_a': 4, 'var_b': 'a string'}"
mydict_2 = dict(json.dump(file_content_2, True))
#Error:
#Traceback (most recent call last):
#File "<pyshell#5>", line 1, in <module>
#mydict_2 = dict(json.dump(file_content_2, True))
#File "C:\Python26\lib\json\__init__.py", line 181, in dump
#fp.write(chunk)
#AttributeError: 'bool' object has no attribute 'write'
使用JSON格式时,我可能会遇到什么问题?我该如何读取文本文件中的JSON数组,并将其转换为Python字典?
附注:我不喜欢使用.py文件的解决方案;我更喜欢.txt、.inc或其他不限制于一种语言的格式。
11 个回答
37
你可以把你的文本文件当作一个Python模块来使用,并通过imp.load_source
动态加载它:
import imp
imp.load_source( name, pathname[, file])
举个例子:
// mydata.txt
var1 = 'hi'
var2 = 'how are you?'
var3 = { 1:'elem1', 2:'elem2' }
//...
// In your script file
def getVarFromFile(filename):
import imp
f = open(filename)
global data
data = imp.load_source('data', '', f)
f.close()
# path to "config" file
getVarFromFile('c:/mydata.txt')
print data.var1
print data.var2
print data.var3
...
107
不过我希望能直接引用我在Python脚本中声明的变量。
如果你愿意稍微改变一下写法,可以直接使用Python,并导入“config”模块。
# myconfig.py:
var_a = 'home'
var_b = 'car'
var_c = 15.5
然后这样做:
from myconfig import *
这样你就可以在当前的环境中通过名字来引用它们了。