-6

好的,假设我在文件中有一个变量名列表,我想将它们存储在一个列表中。我可以创建一个while循环并逐个追加到列表中,但是它们作为字符串保存在列表中。如何将其更改为一组变量名。

list = []
f = open("text.txt",r)
f.readline()
while line != "":
    list.append(line)   
    f.readline()

我希望 list 是变量名列表而不是字符串列表。谢谢

4

1 回答 1

5

首先,变量名只是一个字符串。因此,您已经将变量名称放入列表中。

如果您尝试查找由每个字符串命名的全局变量,并将这些变量放入列表中……那么,您不能这样做,因为您不能将变量放入列表中。变量在 Python 中不是真实的东西,它们只是值的(内置的、全局的、本地的或限定的)名称;价值观才是真实的。

但是,如果您尝试查找由每个字符串命名的全局变量,并将每个变量的值放入一个列表中……那很容易。更改此行:

list.append(line)

……对此:

list.append(globals()[line])

但是,您的代码还有许多其他问题,这意味着它实际上无法正常工作。您已经使用变量r而不是字符串'r'作为文件模式,这(除非r碰巧持有有效的模式字符串)将失败。您也永远不会为 分配任何东西line,而只是丢弃 each 的结果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]

最后,整个设计目标闻起来很奇怪,我敢打赌,这不是完成您想要完成的任何事情的正确方法。

于 2013-05-28T22:33:16.023 回答