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

2024-04-20 03:11:30 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧, 假设我在一个文件中有一个变量名列表,我想将它们存储在一个列表中。 我可以做一个while循环,并将它们作为字符串保存在列表中。如何将其更改为一组变量名。你知道吗

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

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


Tags: 文件字符串texttxt列表readlinelineopen
1条回答
网友
1楼 · 发布于 2024-04-20 03:11:30

首先,变量名就是字符串。所以,你已经把变量名放在一个列表里了。你知道吗

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

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

list.append(line)

…对此:

list.append(globals()[line])

但是,您的代码还有许多其他问题,这意味着它实际上无法工作。您使用了变量r而不是字符串'r'作为文件模式,该模式(除非r碰巧持有有效的模式字符串)将失败。你也从不给line赋值,只是扔掉每个readline的结果,这意味着你会得到一个异常(或一个无限循环或一个立即退出的循环)试图访问它。你知道吗

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

当我们在做的时候,这不是一个很好的python代码。永远不要给变量命名list,应该始终关闭文件,空字符串为false,因此不需要比较,并且应该使用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]

最后,这整个设计目标闻起来很奇怪,我敢打赌,这不是正确的方式来完成任何你想完成的。你知道吗

相关问题 更多 >