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