确定, 假设我有一个文件中的变量名列表,我想将它们存储在列表中。 我可以创建一个while循环并逐个附加到列表中,但它们会作为字符串保存在列表中。如何将其更改为一组变量名称。
list = []
f = open("text.txt",r)
f.readline()
while line != "":
list.append(line)
f.readline()
我希望list是变量名列表而不是字符串列表。 感谢
答案 0 :(得分:5)
首先,只是的变量名是一个字符串。所以,你已经把变量名放在一个列表中了。
如果您正在尝试查找每个字符串命名的全局变量,并将这些变量放入列表中...那么,您不能这样做,因为您无法将变量放入列表中。变量在Python中不是真实的东西,它们只是(内置的,全局的,本地的或合格的)值的名称; 值是真实的东西。
但是如果你试图查找每个字符串命名的全局变量,并将每个变量的值放入列表中......这很容易。改变这一行:
list.append(line)
......对此:
list.append(globals()[line])
但是,您的代码存在许多其他问题,这意味着它实际上无法正常工作。您已使用变量r
而不是字符串'r'
作为文件模式,(除非r
碰巧巧合地保存有效模式字符串)将失败。你也永远不会向line
分配任何东西,只丢掉每个readline
的结果,这意味着你将获得一个异常(或一个无限循环或一个立即退出的循环)试图访问它。
与此同时,大多数逐行读取文件的方法,包括f.readline()
,都会将换行符保留在字符串的末尾,并且你不太可能有一个名字以换行符结尾的变量。
虽然我们在这,但这不是非常pythonic代码。你永远不应该命名变量list
,你应该总是关闭你的文件,空字符串是假的,所以你不需要比较,你应该使用for
循环迭代集合。
所以:
values = []
with open("text.txt") as f:
for line in f:
values.append(globals()[line.rstrip('\n')])
或者,更简单地说,使用列表理解:
with open("text.txt") as f:
values = [globals()[line.rstrip('\n')] for line in f]
最后,整个设计目标闻起来很奇怪,我愿意打赌,这不是你想要完成任何事情的正确方法。