Python 将readline()另存为元素而不是字符串

Python 将readline()另存为元素而不是字符串,python,Python,嗯, 假设我在一个文件中有一个变量名列表,我想将它们存储在一个列表中。 我可以创建一个while循环,并将其逐个附加到列表中,但是它们会作为字符串保存在列表中。如何将其更改为一组变量名 list = [] f = open("text.txt",r) f.readline() while line != "": list.append(line) f.readline() 我希望列表是变量名的列表,而不是字符串的列表。 首先,变量名只是一个字符串。因此,您已经将变量名放入

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

list = []
f = open("text.txt",r)
f.readline()
while line != "":
    list.append(line)   
    f.readline()
我希望列表是变量名的列表,而不是字符串的列表。
首先,变量名只是一个字符串。因此,您已经将变量名放入列表中

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

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

list.append(line)
……为此:

list.append(globals()[line])

但是,您的代码还有许多其他问题,这意味着它实际上无法工作。您使用了变量
r
而不是字符串
'r'
作为文件模式,该模式将失败(除非
r
碰巧持有有效的模式字符串)。您也从不将任何内容分配给
,而是丢弃每个
读取行
的结果,这意味着您将获得一个异常(或一个无限循环或一个立即退出的循环)试图访问它

同时,大多数逐行读取文件的方法,包括
f.readline()
,都会将换行保留在字符串的末尾,并且不太可能有名称以换行结尾的变量

虽然我们在做这件事,但这并不是一个很好的python代码。永远不要命名变量
列表
,应该始终关闭文件,空字符串为false,因此不需要比较,并且应该使用
for
循环来迭代集合

因此:

或者,更简单地说,使用列表理解:

with open("text.txt") as f:
    values = [globals()[line.rstrip('\n')] for line in f]


最后,整个设计目标闻起来很奇怪,我敢打赌,这不是实现您试图实现的任何目标的正确方法。

如果不是字符串,“变量名”是什么?是否要查找名称与每个字符串匹配的全局变量,并将其存储在列表中?(如果是这样,为什么?这是一件非常奇怪的事情。这是可行的,我可以解释如何做到,但如果你描述你的目标是什么,我可能会给你一个更好的方法来实现它。)离题:避免使用
列表
作为变量名。+1是一个很好的解释,尽管并不完全清楚OP想要什么do@MarkkuK.:嗯,我的猜测可能有点离谱,在这种情况下,这是一个完全错误的很好的解释……但让我们祈祷吧。您的第一个代码片段(OP的拷贝和粘贴)中有一个相当明显的错误:您从未将
f.readline()
的值实际存储在
line
中。另外,
readline
方法使尾随的换行符保持打开状态,因此您仍然需要执行
.rstrip('\n')
@jwodder:
rstrip
已经被进一步解决,至少还有一个明显的错误。但是你是对的,除了前面提到的所有其他问题之外,OP的代码将在
上引发
名称错误
。让我编辑答案来解决这个问题。
with open("text.txt") as f:
    values = [globals()[line.rstrip('\n')] for line in f]